3个或更多的序列:Verilog调试
我是Verilog编码新手,代码中有一个错误。有人能帮忙调试吗 主要代码:3个或更多的序列:Verilog调试,verilog,hardware-programming,iverilog,Verilog,Hardware Programming,Iverilog,我是Verilog编码新手,代码中有一个错误。有人能帮忙调试吗 主要代码: module tff (q,t,clk,clear); input t,clk,clear; output reg q; always @(negedge clk or posedge clear) begin if (clear) q <= 0; else if(t==1) q <= ~q; else q<= q; end endmodule module
module tff (q,t,clk,clear);
input t,clk,clear;
output reg q;
always @(negedge clk or posedge clear)
begin
if (clear) q <= 0;
else if(t==1) q <= ~q;
else q<= q;
end
endmodule
module seriesof3 (y,q1,q2,a,clk,clear);
input a,clk,clear,q1,q2;
output reg y,q1,q2;
always @(negedge clk or posedge clear)
begin
if (clear) begin
q1 <= 0;
q2 <= 0;
end
else begin
tff ta (q1,a,clk,clear);
tff tb (q2,~q1&(q2^a),clk,clear);
y <= a&q2;
end
end
endmodule
模块tff(q、t、clk、清除);
输入t、clk、clear;
输出寄存器q;
始终@(negedge clk或posedge clear)
开始
如果(清除)q是,您有几个问题:-)
模块tff
在always块(实例ta和tb)内实例化。这在verilog中是非法的。您需要将实例化移到外部
您非法将端口q1
和q2
定义为输入,同时定义为输出。它们应该只是输出
在时间刻度之前使用了不正确的字符。应该是背面的勾号“`”。时间刻度语法中没有=
的位置
在声明moduel testbench之后,您忘记了分号
在$display和其他中,$
后面有空格<代码>$
是名称的一部分
永久
必须位于初始块内,然后将其置于外部q1
和q2
由aways块和模块实例驱动多次。由于还可以在tff模块内初始化它们,因此不需要在seriesof3中初始化它们forever
语句后面有一些代码。这段代码永远不会执行。您需要另一个初始块,我建议永久语句使用一个单独的块。此外,您还需要初始化clk信号,否则它将保持在“x”module tff (q,t,clk,clear);
input t,clk,clear;
output reg q;
always @(negedge clk or posedge clear)
begin
if (clear) q <= 0;
else if(t==1) q <= ~q;
else q<= q;
end
endmodule
module seriesof3 (y,q1,q2,a,clk,clear);
input a,clk,clear;
output reg y,q1,q2;
always @(negedge clk or posedge clear)
begin
if (clear) begin
//q1 <= 0;
//q2 <= 0;
end
else begin
y <= a&q2;
end
end
tff ta (q1,a,clk,clear);
tff tb (q2,~q1&(q2^a),clk,clear);
endmodule
`timescale 1 ms/1 ms
module testbench(); //(y,a,clk,clear);
reg a,clk,clear;
wire y,q1,q2;
seriesof3 DUT (y,q1,q2,a,clk,clear);
initial
begin
$dumpvars(0,testbench);
$dumpfile("first.vcd");
$monitor ($time,"a=%b, Y= %b",a,y);
clear=0;
a=0;
#2 clear=1;
#5 clear=0;
#8 a=0;
#5 a=1;
#5 a=1;
#5 a=1;
#5 a=1;
#5 a=0;
#5 a=1;
#5 a=1;
#5 a=0;
#5 a=1;
#5 a=1;
#5 $finish;
end
initial begin
clk = 0;
forever #5 clk= ~clk;
end
endmodule
模块tff(q、t、clk、清除);
输入t、clk、clear;
输出寄存器q;
始终@(negedge clk或posedge clear)
开始
如果(清除)q您能指定您面临的错误类型吗?非常感谢您对我犯的每一个错误进行调试和解释。
module tff (q,t,clk,clear);
input t,clk,clear;
output reg q;
always @(negedge clk or posedge clear)
begin
if (clear) q <= 0;
else if(t==1) q <= ~q;
else q<= q;
end
endmodule
module seriesof3 (y,q1,q2,a,clk,clear);
input a,clk,clear;
output reg y,q1,q2;
always @(negedge clk or posedge clear)
begin
if (clear) begin
//q1 <= 0;
//q2 <= 0;
end
else begin
y <= a&q2;
end
end
tff ta (q1,a,clk,clear);
tff tb (q2,~q1&(q2^a),clk,clear);
endmodule
`timescale 1 ms/1 ms
module testbench(); //(y,a,clk,clear);
reg a,clk,clear;
wire y,q1,q2;
seriesof3 DUT (y,q1,q2,a,clk,clear);
initial
begin
$dumpvars(0,testbench);
$dumpfile("first.vcd");
$monitor ($time,"a=%b, Y= %b",a,y);
clear=0;
a=0;
#2 clear=1;
#5 clear=0;
#8 a=0;
#5 a=1;
#5 a=1;
#5 a=1;
#5 a=1;
#5 a=0;
#5 a=1;
#5 a=1;
#5 a=0;
#5 a=1;
#5 a=1;
#5 $finish;
end
initial begin
clk = 0;
forever #5 clk= ~clk;
end
endmodule