在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4869|回复: 8

[求助] asic中Verilog怎样对reg变量赋初值?

[复制链接]
发表于 2018-4-26 16:16:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
verilog 代码如下




  1. module reg_4(clk,num_in,num_out);
  2. input clk;

  3. input signed [4:0]  num_in;

  4. output reg signed [4:0] num_out;

  5. reg signed [4:0] delay=0;


  6. always @(posedge clk)

  7.         begin

  8.                 delay=num_in;

  9.         end

  10. always @(negedge clk)

  11.         begin

  12.                 num_out=delay;

  13.         end

  14. endmodule


复制代码


可是综合出来不太对




  1. module reg_4(clk, num_in, num_out);
  2.   input clk;
  3.   input [4:0] num_in;
  4.   output [4:0] num_out;
  5.   wire clk;
  6.   wire [4:0] num_in;
  7.   wire [4:0] num_out;
  8.   wire [4:0] delay;
  9.   wire UNCONNECTED;
  10.   assign num_out[1] = 1'b0;
  11.   assign num_out[2] = 1'b0;
  12.   assign num_out[3] = 1'b0;
  13.   assign num_out[4] = 1'b0;
  14.   DFFNSRXL \num_out_reg[0] (.RN (1'b1), .SN (1'b1), .CKN (clk), .D
  15.        (delay[0]), .Q (num_out[0]), .QN (UNCONNECTED));
  16.   DFFQX1 \delay_reg[0] (.CK (clk), .D (num_in[0]), .Q (delay[0]));
  17. endmodule


复制代码
发表于 2018-4-26 17:06:46 | 显示全部楼层
ASIC需要通过RESET赋值,或者直接接VCC或GND
 楼主| 发表于 2018-4-26 22:44:11 | 显示全部楼层
回复 2# everhappy
请问具体怎么实现,用代码吗,新手不太懂
发表于 2018-4-27 15:47:53 | 显示全部楼层
可以先好好看看书,如果你这个代码是从书上看来的,那你可以把这本书扔掉了,绝对误人子弟,找一本能好好讲解描述语言的书。
发表于 2018-4-28 08:45:08 | 显示全部楼层
asic中,register多数有一个reset的input port.
 楼主| 发表于 2018-4-28 23:37:07 | 显示全部楼层
回复 4# gaurson
这个代码是我自己写的....我是想起到一个对信号的延迟效果,这个代码就是延续我以前玩fpga时的写法...不知大哥能不能告诉我这个代码哪里不好呢
发表于 2018-4-29 16:44:16 | 显示全部楼层
回复 6# 839219928


    楼上的几位都给你指出来了,需要有一个复位的分支来对reg进行初始化。一般正规的时序逻辑块代码如下:
    always@(negedge reset or posedge clk)
    if(reset == 0)
    ...
    else
    ...
    ——差不多是这样,你可以找些书进行确认 。
发表于 2018-4-30 14:07:40 | 显示全部楼层
1. 异步复位
    always @(posedge clk or negedge rst_n)
       if (!rst_n)
         reg <= 0;
       else
         reg <= d;

2. 同步复位
    always @(posedge clk)
       if (!rst_n) reg <= 0;
       else reg <= d;

总之,要有一个rst_n
发表于 2018-5-18 23:03:40 | 显示全部楼层
若是用在 testbench, 可以在宣告 reg 時, 直接賦予初值.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 02:41 , Processed in 0.026715 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表