在verilog中赋值失败, 不知道是什么原因, 求大神帮我看看, 谢谢先.

在我的下面这个module里,我用c来测j的变化,用d来测state的变化,但是我用testbench仿真后,可得到只有state变化了,而j没有被赋上值,我不知道为什么... 在我的下面这个module里,我用c来测j的变化,用d来测state的变化, 但是我用testbench仿真后, 可得到只有state变化了,而j没有被赋上值,我不知道为什么, 求大神求点迷津,谢谢.
module try (clk, rst, c, d);
input wire clk;
input wire rst;
reg [1:0] state;
output reg [1:0] d;
reg [3:0] j;
output reg [3:0] c;

always@(posedge clk or negedge rst) begin
if(!rst) begin
j <= 4'd0;
c = j;
state <= 0;
d = state;
end
else begin
if (j < 2) begin
if (state < 4) begin
state <= state + 1;
d = state;
end
else begin
if (state == 4) begin
j <= j + 1;
c = j;
state <= 0;
d = state;
end
end
end
end
end
endmodule

下面是我的testbench:

`timescale 1ns/100ps
module testbench1 ();

reg clk;
reg rst;
wire [3:0] c;
wire [1:0] d;

try DUT (
.clk(clk),
.rst(rst),
.c(c),
.d(d)
);

initial begin
clk <= 0;
rst <= 0;
#1
rst <= 1;
#5
clk <= 1; // S = 00
#5
clk <= 0;
#5
clk <= 1; // S = 01
#5
clk <= 0;
#5
clk <= 1; // S = 10
#5
clk <= 0;
#5
clk <= 1; // S = 11
#5
clk <= 0;
#5
clk <= 1; // S = 00
#5
clk <= 0;
#5
clk <= 1; // S = 01
#5
clk <= 0;
#5
clk <= 1; // S = 10
#5
clk <= 0;
#5
clk <= 1; // S = 11
#5
clk <= 0;

end

endmodule

谢谢!
展开
 我来答
帐号已注销
2015-02-28 · TA获得超过8230个赞
知道小有建树答主
回答量:1146
采纳率:94%
帮助的人:218万
展开全部
提两个建议,第一个是谨慎使用阻塞赋值,你可以使用非阻塞赋值,一样可以查看到一个变量随着另一个变量的变化,只不过延后了一个CLK周期而已;第二个是触发条件是clk上升沿和RST下降沿,仿真时不要把时序写的那么紧,完全可以让rst保持低电平的时间长一些,作为程序复位的仿真时序图会方便看一些;具体的LZ慢慢调试,可以把你的程序和testbench同时做简化,另外查看下仿真工具的message里有没有警告和错误
更多追问追答
追问
你好, 谢谢你的回复, 我想问一下, 我怎么才可以让rst保持低电平的时间长一些呢? 不好意思啊,我才学verilog
追答
initial begin
clk <= 0;
rst <= 0;
#1
rst <= 1;
#5
clk <= 1; // S = 00
#5上面是你写的仿真动作,\你的RST信号只拉低了1ns clk的上升沿在6ns后第一次来到
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式