.clk (clk), .data(data), .rst_(rst_), .load(load) );
initial begin clk=0;
forever begin #10 clk=1'b1; #10 clk=1'b0; end end
initial begin
$timeformat(-9,1,\
$monitor(\ $stime,data,clk,rst_,load,cnt); $dumpvars(2,counter_test); end task expect;
input [4:0]expects;
if(cnt !==expects)begin
$display(\ $time,cnt,expects); $display(\ $finish; end endtask initial begin
@(negedge clk)
{rst_,load,data}=7'b0_X_XXXXX;@(negedge clk)expect(5'h00); {rst_,load,data}=7'b1_1_11101;@(negedge clk)expect(5'h1D); {rst_,load,data}=7'b1_0_11101; repeat(5)@(negedge clk); expect(5'h02);
{rst_,load,data}=7'b1_1_11111;@(negedge clk)expect(5'h1F); {rst_,load,data}=7'b0_X_XXXXX;@(negedge clk)expect(5'h00); $display(\ $finish; end endmodule
四、 仿真结果与波形
五、
思考题
该电路中,rst-是同步还是异步清零端?
在counter.v的always块中reset没有等时钟,而是直接清零。所以是异步清零端。
LAB 3:简单时序逻辑电路的设计
一、 二、
实验目的 实验原理
使用预定义的库元件来设计八位寄存器。
八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;当load=0,寄存器保持。对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。
三、 源代码
clock.v
`timescale 1 ns /1 ns module clock(clk);
reg clk; output clk; initial begin clk=0;
forever begin #10 clk=1'b1; #10 clk=1'b0; end end endmodule
mux及dffr模块调用代码
mux mux7 (.out(n1[7]), .sel(load), .b(data[7]), .a(out[7]) );
dffr dffr7 (.q(out[7]), .d(n1[7]), .clk(clk), .rst_(rst_) );
mux mux6 (.out(n1[6]), .sel(load), .b(data[6]), .a(out[6]) );
dffr dffr6 (.q(out[6]),
.d(n1[6]), .clk(clk), .rst_(rst_) );
mux mux5 (.out(n1[5]), .sel(load), .b(data[5]), .a(out[5]) );
dffr dffr5 (.q(out[5]), .d(n1[5]), .clk(clk), .rst_(rst_) );
mux mux4 (.out(n1[4]), .sel(load), .b(data[4]), .a(out[4]) );
dffr dffr4 (.q(out[4]), .d(n1[4]), .clk(clk), .rst_(rst_) );
mux mux3 (.out(n1[3]), .sel(load), .b(data[3]), .a(out[3]) );
dffr dffr3 (.q(out[3]), .d(n1[3]), .clk(clk), .rst_(rst_) );
mux mux2 (.out(n1[2]), .sel(load),