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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[求助]触发问题!@后电平触发还是边沿触发。

[复制链接]
发表于 2004-6-16 22:46:58 | 显示全部楼层 |阅读模式

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

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

x
我有这样一个always块
always @(reset or c1)
...
我是想在c1变化的时候触发这个进程,可是reset不能用posedge reset,只能被综合为电平触发。但是c1却是一个边沿触发,上升延和下降延都可以。怎么办?
写成这样
always @(posedge reset or posedge c1 or negedge c1)
又不能同时检验上升延和下降延:(
如果reset是电平触发没什么,可是我还有一个信号一定要边沿触发,在这里应该怎么处理??
发表于 2004-6-16 23:32:50 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

直接按硬件结构来想吧,要么综合成纯组合电路,要么综合成带清零端的触发器。看看怎么能符合你的要求。
 楼主| 发表于 2004-6-17 00:45:07 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

从硬件结构来看,我所希望的是一个带清零的寄存器,平时和wire输入的波形相同,但是当一个异步脉冲出现的时候,这个寄存器就从另一个寄存器取数。
也就是这样,o1为输出,m1为一有数据的寄存器,c1是一个输入。run==1时,o1从c1取数,run==0时,如果select这个脉冲到了,就把m1的数据送到o1上,这应该是一个数据选择器吧!
reg o1;
reg m1;
wire c1;
always @(c1)
if (run)
o1<=c1;
always @(posedge select)
if (!run)
o1<=m1;
现在要把这两个进程和起来,不知道应该怎么写了:( 否则综合不能通过。我想用数码管显示o1的输出。所以不能分成两个output:(
发表于 2004-6-17 07:47:55 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

对于ASIC设计来说,应该是个全同步的设计较好,所以那个异步脉冲应该通过时钟来采样,酱子就可以用1个典型的MUX+DFF结构来实现了。对你的要求有两个疑问,1是是不是异步脉冲select很小(小于1个时钟脉冲,也就是同步设计中的glitch)都要改变输出?2是当run==0且select==0时输出是保持还是c1的值?代码如下:
assign o1_pre = (run) ? c1 : ((select) ? m1 : o1);(按保持写的)
always @(posedge clk or negedge reset_n)
begin
  if(!reset_n)
    begin
        o1  <=  1'b0;
    end
  else
    begin
       o1   <=  o1_pre;
    end
end
发表于 2004-6-17 16:41:41 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

思路基本上和 iamchine 论坛版主一样,但更能符合楼主要求。
always @(posedge clk or negedge reset_n)
    if (~reset_n) begin
        o1       <= 1'b0;
        c1_reg   <= 1'b0;
    end else begin
        c1_reg   <= c1;
        if (c1_reg != c1)
                o1    <=
    end
 楼主| 发表于 2004-6-17 22:41:15 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

[这个贴子最后由brotherjam在 2004/06/17 10:48pm 第 1 次编辑]

谢谢楼上的各位帮助,我现在对同步设计时的各种突发信号的解决方法不是很清楚,所以就会用异步电路实现。后来想想还是同步电路比较好!:)
谢谢各位
用一个高频的的clk检验脉冲应该怎么做呢?看有的书上介绍说是比如10ms保持不变就是脉冲,可是这个10ms怎么实现呢?
发表于 2004-6-18 07:44:11 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

多长时间的脉冲检测由你具体的应用而定,不是说10ms就包打天下的。实现这个时间自然是利用高频clk的计数器来完成。
发表于 2004-6-18 14:27:33 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

同步清零寄存器是通不过仿真的,所以还是要用异步的.程序如下,我们一直用的就是这.
assign reset_n = ~reset;
always @(posedge clk or posedge reset_n)
   if (reset_n)
          reg_out   <= 1'b0;
   else
          reg_out   <= d_in;
   
这是带异步清零的寄存器.
发表于 2004-6-19 13:15:47 | 显示全部楼层

[求助]触发问题!@后电平触发还是边沿触发。

.
楼上的同学,能否解释下同步清零寄存器为何通不过仿真?[我是真的没有这个概念,别的高手也可以帮忙解释]
另:
always @(posedge clk or negedge reset_n)
begin
  if(!reset_n)
     reg_out  <= 1'b0;
  else
     reg_out  <= d_in;
end  //本就是个低电平异步清零(复位)寄存器。
always @(posedge clk )
begin
  if(!reset_s)
     reg_out  <= 1'b0;
  else
     reg_out  <= d_in;
end  //这个才是个低电平同步清零(复位)寄存器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2025-5-14 03:13 , Processed in 0.026925 second(s), 10 queries , Gzip On, MemCached On.

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