微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 在线等,大神看看我这代码哪里出错了?仿真不通过

在线等,大神看看我这代码哪里出错了?仿真不通过

时间: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;
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吧。所有模块,如果要想仿真得到正确的结果,输出信号必须要有复位初始值,也即模块必须有复位信号,我将你的模块修改后贴上来,就能正常工作了。

  1. module cnt5(rst_n,aa,clk);

  2. input rst_n;
  3. input  clk;
  4. output[3:0] aa;

  5. reg[4:0] cqi;
  6. reg[3:0] aa ;


  7. always @( posedge clk or negedge rst_n)
  8. if(!rst_n)
  9.         cqi <= 5'd0;
  10. else
  11.   cqi <= cqi+1'b1;

  12. always @(cqi or rst_n)
  13. if(!rst_n)
  14.         aa <= 4'd0;
  15. else
  16.    aa <=cqi[4:1];

  17. endmodule

复制代码


另外附上我写的测试脚本:

  1. `timescale 1ns/1ns

  2. module cnt5_tb;

  3.         reg rst_n;
  4.         reg clk;
  5.         wire [4:1]aa;

  6.         cnt5 cnt5(
  7.                 .rst_n(rst_n),
  8.                 .aa(aa),
  9.                 .clk(clk)
  10.         );
  11.        
  12.         initial begin
  13.                 rst_n = 0;
  14.                 clk = 1;
  15.                 #100;
  16.                 rst_n = 1;
  17.                 #50000;
  18.                 $stop;
  19.         end
  20.        
  21.         always #10 clk = ~clk;
  22.        
  23. endmodule

复制代码

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

网站地图

Top