第一个问题:
有的时候我发现仿真的代码停不下来,按modelsim里红色的stop不能停止,按旁边的break按钮会在transcript中提示break key hit,直接关modelsim也是会在transcript中提示break key hit。这种情况是如何造成的,怎么解决?
而且第二问题出现的时候,modelsim也会进入这种状态。
第二个问题:
.v文件的代码如下:
module reg_feizuse(clk,din,qout,reset);
output [3:0]qout;
reg [3:0]qout;
input din;
input clk,reset;
always @(posedge clk or posedge reset)
begin
if(reset)
qout <= 4'b0000;
else
qout[0] <= din;
qout[1] <= qout[0];
qout[2] <= qout[1];
qout[3] <= qout[2];
end
endmodule
就是一个四位的非阻塞移位程序。
testbench的代码如下:`timescale 1 ps/ 1 ps
module reg_feizuse_vlg_tst();
reg clk;
reg din;
reg reset;
wire [3:0] qout;
reg_feizuse i1 (
.clk(clk),
.din(din),
.qout(qout),
.reset(reset)
);
initial
begin
#20 clk = 1'b0;
#20 reset = 1'b1;
#20 clk = 1'b1;
#20 reset = 1'b0;
#20 din = 1'b0;
#10000 $finish;
$display("Running testbench");
end
always
begin
if(reset == 1'b0) //只要加上这句判断,全部的波形就都没有了,包括clk的时钟波形。我加这句的目的是想通过initial模块控制reset的置零时间来控制din信号启动的时间。但是却遇到了这样的问题。再问,有什么代码能达到这个效果 //吗?总感觉这个方法是笨方法,不直接。
#40 din = ~din;
end
always
begin
#20 clk = ~clk;
end
endmodule
大神看到了求指教啊!先谢为敬!
|