在线等,大神看看我这代码哪里出错了?仿真不通过
时间:10-02
整理:3721RD
点击:
谢谢啦,aa没有输出
module cnt5(aa,clk);
input clk;
output[4:1] aa;
reg[4:0] cqi;
reg[4:1] aa;
always @( posedge clk )
begin
cqi <= cqi+1'b1;
end
always @(cqi)
begin
aa <=cqi[4:1];
end
endmodule
另外附上我写的测试脚本:
module cnt5(aa,clk);
input clk;
output[4:1] aa;
reg[4:0] cqi;
reg[4:1] aa;
always @( posedge clk )
begin
cqi <= cqi+1'b1;
end
always @(cqi)
begin
aa <=cqi[4:1];
end
endmodule
module cnt5(aa,clk);
input clk;
output[4:1] aa;
reg[4:0] cqi;
wire [4:1] aa;
always @( posedge clk )
begin
cqi <= cqi+1'b1;
end
assign aa = cqi[4:1];
endmodule 这样你试试。 时序和组合逻辑区别你多看看
aa<=cqi...改成aa=cqi...看看
沉贴了估计,看到还是回复下,我前几天遇到也是这个,,因为不可以在不同的always里对同一个寄存器修改,一楼的修改应该是正确是
小编定义寄存器reg[4:1] aa;写成这样,不太合乎规范吧,reg[3:0] aa;更好一些。
另外,你写成这样,仿真是不会出结果的,只会是一条红线,原因就是因为你没有给aa复位初始值,导致aa无法正常被赋值。看来小编还是刚开始学习verilog吧。所有模块,如果要想仿真得到正确的结果,输出信号必须要有复位初始值,也即模块必须有复位信号,我将你的模块修改后贴上来,就能正常工作了。
- module cnt5(rst_n,aa,clk);
- input rst_n;
- input clk;
- output[3:0] aa;
- reg[4:0] cqi;
- reg[3:0] aa ;
- always @( posedge clk or negedge rst_n)
- if(!rst_n)
- cqi <= 5'd0;
- else
- cqi <= cqi+1'b1;
- always @(cqi or rst_n)
- if(!rst_n)
- aa <= 4'd0;
- else
- aa <=cqi[4:1];
- endmodule
另外附上我写的测试脚本:
- `timescale 1ns/1ns
- module cnt5_tb;
- reg rst_n;
- reg clk;
- wire [4:1]aa;
- cnt5 cnt5(
- .rst_n(rst_n),
- .aa(aa),
- .clk(clk)
- );
-
- initial begin
- rst_n = 0;
- clk = 1;
- #100;
- rst_n = 1;
- #50000;
- $stop;
- end
-
- always #10 clk = ~clk;
-
- endmodule