微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 求各位大哥哥帮忙做个题,谢谢

求各位大哥哥帮忙做个题,谢谢

时间:12-12 整理:3721RD 点击:
二本院校菜鸟一枚,马上大四要找工作了,以前没好好学,现打算努努力。老师没控理我,周围同学就不提了。实在没办法来网上求助,题目很简单,对各位来说也许就是举手之劳的事,对我来说确始终不明白问题出在哪。本人正在开始学习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 #1 g2(q2,q4,q1)后,仿真结果又跟书上说的一致。这是为啥呢?
后来我单独设计了一个两与非门构成的RS触发器,没加延时单位在代码中,发现仿真结果跟书上说的一致。这又是什么原因呢?
哎,这个问题困扰我茶不思饭不香,很想把它解决,求给位大哥哥帮帮我,谢谢!

d触发器的写法就是
1,  同步复位,没有置位, 没有en的d-ff
always @(posedge clk)
begin
if (reset)
     q <= 0;
else
     q <= d;
end
2, 没有复位没有置位没有en的d-ff
always @(posedge clk)
begin
q <= d;
end
3, 同步复位,有en没有置位
always @(posedge clk)
begin
if (reset)
q <= 0
else if (en)
q <= d
end

窝总以他15年的工程经验告诉你,gate level是没意义的。你去公司面试,他也不会这么面你。当然,如果你想去做library,或者mixed signal,就另当别论了。

上一篇:paper求下载
下一篇:关于fifo的深度问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top