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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: wufpga

[求助] always结构里面的Count0_out[怎么自动变成敏感变量啊

[复制链接]
发表于 2010-3-31 11:53:20 | 显示全部楼层
如果你仅仅是写个逻辑玩玩,想仿真一下,可以这么写:
always@(posedge a or negedge a)
begin
     if (a==1)    b = c[15:0]
     else           b = c[31:16]
end
但是如果你是想写一个真实的电路,那么你可能要从结构上重新考虑。
发表于 2010-3-31 11:56:52 | 显示全部楼层
用synplify 综合一下 看看rtl图就明白了。在敏感信号表里没用用沿触发,综合出来的是个多路复用器。当然是不会保持的。
发表于 2010-3-31 13:00:40 | 显示全部楼层
你这个可以采用计数器解决的嘛 计数周期为你采样的周期
发表于 2010-3-31 13:49:18 | 显示全部楼层
always @ (posedge clk or negedge rst_n)
begin
      if(!rst_n)
        Result_en_d1 <= 1'b0;
      else
        Result_en_d1 <= Result_en;
end

assign Result_en_pos = !Result_en_d1 && Result_en;
assign Result_en_neg = !Result_en && Result_en_d1;

always @ (posedge clk or negedge rst_n)
begin
      if(!rst_n)
             flag <= 1'b0;
      else if (Result_en_pos)
             flag <= 1'b1;
       else if(Result_en_neg)
             flag <= 1'b0;
       else
             flag <= flag;
end

assign Result[15:0] = flag ? Count0_out[15:0] : Count0_out[31:16];
发表于 2010-3-31 13:57:58 | 显示全部楼层
如果Result_en 变化频率很快.
就用下面的:
always @ (posedge Result_en or negedge rst_n)
begin
      if(!rst_n)
       Count0_out_d1[15:0] <= 16'h0000;
      else
        Count0_out_d1[15:0] <= Count0_out[15:0] ;
end

assign Result[15:0] = Result_en ? Count0_out_d1[15:0] : Count0_out[31:16];
发表于 2010-3-31 18:01:05 | 显示全部楼层
12楼正解!
组合逻辑如何实现“保持”?
发表于 2010-3-31 18:13:05 | 显示全部楼层
always @(posedge clk)
begin
   Old_Result_en <= Result_en;
end

always @(posedge clk or posedge rst)
begin
   if(rst==1'b1)   Result <= 0;
   else if((Old_Result_en==1'b0)&(Result_en==1'b1)) Result <= Count0_out[15:0];
   else if((Old_Result_en==1'b1)&(Result_en==1'b0)) Result <= Count0_out[31:16];
   else Result <= Result;
end

Am I right??
发表于 2010-3-31 18:48:11 | 显示全部楼层
1# wufpga

从电路上考虑问题,verilog只是表现形式
 楼主| 发表于 2010-3-31 20:20:14 | 显示全部楼层
zerowel ,您是我的贵人啊!!非常感谢

你的第二段程序意思也是Count0_out变换太快的写法。

assign Result[15:0] = Result_en? Count0_out[15:0] : Count0_out[31:16];
和下面这个always的区别到底有多大啊。
always @(Result_en)
begin
    if(Result_en == 1)
      Result = Count0_out_d1[15:0];
     else  
      Result =Count0_out[31:16];
     
end
*/
 楼主| 发表于 2010-3-31 20:27:10 | 显示全部楼层
jerry365说的非常对,最好能够有verilog映射成电路。但是本人的电路知识不是很扎实。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-20 05:51 , Processed in 0.022812 second(s), 6 queries , Gzip On, Redis On.

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