马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
二本院校菜鸟一枚,马上大四要找工作了,以前没好好学,现打算努努力。老师没控理我,周围同学就不提了。实在没办法来网上求助,题目很简单,对各位来说也许就是举手之劳的事,对我来说确始终不明白问题出在哪。本人正在开始学习verilog,题目是用verilog写个d触发器,门级描述的那种设计方法。工具用的是modelsim SE 10.1a
d触发器的门级设计代码如下:
module d_ff(d, clk, q ); input d;
input clk;
output q;
wire q1,q2,q3,q4,q5,q6;
nand g1 (q1,q3,q2);
nand g2 (q2,q4,q1);
nand g3 (q3,q5,clk,q4);
nand g4 (q4,clk,q6);
nand g5 (q5,q3,d);
nand g6 (q6,q5,q4);
assign q = q2;
endmodule
测试代码如下: `timescale 1ns/1ps
module d_ff_tb();
reg d;
reg clk;
wire q;
always #100 clk = ~clk;
always #30 d = ~d;
d_ff u1(.d(d), .clk(clk), .q(q));
initial begin clk = 0; d =0;
end
endmodule
问题是这样的:设计代码nand g1(q1,q3,q2),nand g2(q2,q4,q1)的仿真结果和理论值不一样。根据书 上的理论g1,g2这两个与非门的连接方式构成RS触发器。当q3=1,q4=1的时候,q1,q2的值应该保持不变才对。但是仿真的结果却是q1,q2翻转了。然后把代码 nand g1(q1,q3,q2)改写成了 nand #1 g1(q1,q3,q2) ,nand g2(q2,q4,q1)改写成了nand #1g2(q2,q4,q1)后,仿真结果又跟书上说的一致。这是为啥呢? 后来我单独设计了一个两与非门构成的RS触发器,没加延时单位在代码中,发现仿真结果跟书上说的一致。这又是什么原因呢?
哎,这个问题困扰我茶不思饭不香,很想把它解决,求给位大哥哥帮帮我,谢谢! |