微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > verilog写的门级d触发器做2分频用modelsim和ise仿真都无法出现波形

verilog写的门级d触发器做2分频用modelsim和ise仿真都无法出现波形

时间:10-02 整理:3721RD 点击:
我用门级描述verilog写了d触发器,然后链接了q非端和d断,把输出q连接到一个计数器想做2分频,但是因为没有初始状态,波形都是x。仿真器里可以设置初始状态么?
然后我给d触发器加了一个r端,使初始状态为0,但是那样我跑仿真之后仿真到第一个时钟上升沿就没有之后的波形了,可能是卡在哪个地方。
计数器模块单独仿真正常。
d触发器模块如果不把d和q非端连接起来的话功能也正常。
d触发器加了r段之后可以看到第一个时钟上升沿q从0变1,之后就卡住没有图形了。我觉得问题出在d触发器分频电路,网上找到的d触发器分频都是行为级描述,有没有人做过门级描述的d触发器分频。
可以正常工作的不带r端d触发器的代码是这样的,我是按照百科上的电路图画的,不把d和q非连起来的而是d用外部信号的话可以正常工作,连接d和q非因为没有初始状态,波形一直是x。module dff(d,clk,q,qn);output q,qn;input d,clk;nand g1 (w1,d,clk);nand g2 (w2,w1,clk);nand g3 (q,w1,qn);nand g4 (qn,q,w2);endmodule

调整代码如下:
//连接计数器和2分频电路
module counter2d(out,clk,reset,r);
output [7:0] out;
input clk,reset,r;
dff m1 (clk,q,r);
counter8 m2(out,q,reset);
endmodule
//d触发器原理2分频门级描述
module dff(clk,q,r);
output q;
input clk,r;
wire d;
nand g1 (w1,d,clk);
nand g2 (w2,w1,clk);
nand g3 (q,w1,d);
nand g4 (d,q,w2,r);
endmodule
//八位计数器
module counter8(out,clk,reset);
output [7:0] out;
reg [7:0] out;
input reset,clk;
always @(posedge clk)
begin
if (reset) out <= 0;
else out<= out+1;
end
endmodule
//测试testbench
module tbcounter2d;
reg clk,reset,r;
wire out;
counter2d i1(out,clk,reset,r);
initial
begin
clk=0;
forever #50 clk= !clk;
end
initial
begin
reset=1;
#110 reset=0;
end
initial
begin
r=0;
#30 r=1;
end
endmodule

你还需要仔细看看verilog书,code问题比较多,建议你先不要用门级描述。

你的dff描述为啥没有d端口

?

tb中例化的顶层counter2d 模块需要借口定义,不是只列出counter2d的借口,还需要写明tb模块产生的信号与借口的连接,应该这样:
counter2d i1(
.out(out),
.clk(clk),
.reset(reset),
.r(r)
);

上一篇:LED-PWM调制
下一篇:有关ISE仿真

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

网站地图

Top