搜索
bottom↓
回复: 32

如何让一个信号,在另一个信号上升沿置1,下降沿置0?

[复制链接]

出0入0汤圆

发表于 2012-11-20 17:40:20 | 显示全部楼层 |阅读模式
咨询大家一个问题:如何让一个信号,在另一个信号上升沿置1,下降沿置0?
如下的信号a,信号b 在信号a上升沿置位1,下降沿置位为0
always @(posedge a)
    b <=1'b1;

always @( negedge  a)
   b<=1'b0;

希望达到这样的效果,但这样写编译一定通过不了,
大家都用什么办法实现这样的功能?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-20 20:19:13 | 显示全部楼层
always @(posedge clk(大时钟) or negedge rst_n)
begin
  if(!rst_n) b <= 1'b0;
  else if(a_pos)  b <= 1'b1;
  else if(a_neg)  b <= 1;b0;
end
仅供参考!

出20入186汤圆

发表于 2012-11-20 20:39:37 | 显示全部楼层
ab8780000 发表于 2012-11-20 20:19
always @(posedge clk(大时钟) or negedge rst_n)
begin
  if(!rst_n) b

这种方法不就又多了两个变量了么?

关注

出20入186汤圆

发表于 2012-11-20 20:41:05 | 显示全部楼层
always @(posedge a or negedge  a)
   if (a) b <=1'b1;
else
   b<=1'b0;


这样呢?
未验证

出0入22汤圆

发表于 2012-11-20 20:41:23 | 显示全部楼层
其实我觉得应该还有更简单的
assign b=a;

出20入186汤圆

发表于 2012-11-20 20:41:30 | 显示全部楼层
记得一个变量只能在一个进程里赋值

出0入0汤圆

发表于 2012-11-20 20:58:24 | 显示全部楼层
干吗不直接用a?
支持5楼。

出0入0汤圆

发表于 2012-11-20 21:21:53 | 显示全部楼层
always @(posedge a)
if(rst) m <=0;
else m <=~m;

always @( negedge  a)
if(rst) n <=0;
else n <=~n;

assign b = m ^ n;

出200入657汤圆

发表于 2012-11-20 22:11:14 | 显示全部楼层
各位,逻辑电路不是C语言

出200入657汤圆

发表于 2012-11-20 22:12:32 | 显示全部楼层
什么叫hdl,就是hardware description language
用软件思维来写是很恐怖的

出200入657汤圆

发表于 2012-11-20 22:16:39 | 显示全部楼层
lz的问题,如果是考虑到系统稳定性,最好的方法是
用系统时钟采样输入信号,就是多个触发器串联去采样输入信号
然后下降沿和上升沿其实也很容易获取
就是前一个触发器 AND 后一个触发器的反
或者 前一个触发器的反 AND 后一个触发器
即可检出上升下降沿脉冲
这个是跨时钟域处理的最基础的问题
我不是做逻辑的,具体找书去

出0入0汤圆

发表于 2012-11-20 22:52:22 | 显示全部楼层
如果没有其他附加条件的话,5楼正解……

出0入0汤圆

发表于 2012-11-21 09:57:10 | 显示全部楼层
个人感觉如果要稳定,这样行不行?
always(posedge clk)
  begin
     a_tmp1 <= a;
     a_tmp2 <= a_tmp1;
  end

always(posedge clk)
  begin
    if(a_tmp1 && !a_tmp2) //上升沿
      b <= 1'b1;
    else if(!a_tmp1 && a_tmp2) //下降沿
      b <= 1'b0;
  end

出0入0汤圆

 楼主| 发表于 2012-11-21 11:01:15 | 显示全部楼层
谢谢 ,应该效果不错   

出0入0汤圆

发表于 2012-11-21 14:04:16 | 显示全部楼层
13楼是推荐的写法

出0入0汤圆

发表于 2012-11-22 18:30:15 | 显示全部楼层
我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多代码来实现明摆着的东西?
学术研究?让信号与时钟同步?让信号延时2个时钟?
楼主,你看呢?

出0入0汤圆

发表于 2012-11-22 21:03:13 来自手机 | 显示全部楼层
用模拟比较器

出0入0汤圆

发表于 2012-11-23 09:40:36 | 显示全部楼层
zhangalex88 发表于 2012-11-22 18:30
我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多 ...

消除组合电路的毛刺现象

出0入0汤圆

发表于 2012-11-23 12:31:56 | 显示全部楼层
5楼应该是可以的    简单实用
如果有毛刺应该从另外的角度去去除  而不是把它搞复杂

出0入0汤圆

发表于 2012-11-27 11:54:49 | 显示全部楼层
学习了。13楼应该可以。

出0入0汤圆

 楼主| 发表于 2012-11-27 17:34:45 | 显示全部楼层
to yuyu87
这里没有进程,是电路布线,布线后应该是并连或串连的电路

出0入0汤圆

发表于 2012-11-27 18:22:46 | 显示全部楼层
always @ (posedge clk or negedge rst_n) begin
        if(!rst_n) begin
                        rs232_rx0 <= 1'b0;
                        rs232_rx1 <= 1'b0;
                        rs232_rx2 <= 1'b0;
                        rs232_rx3 <= 1'b0;
                end
        else begin
                        rs232_rx0 <= rs232_rx;
                        rs232_rx1 <= rs232_rx0;
                        rs232_rx2 <= rs232_rx1;
                        rs232_rx3 <= rs232_rx2;
                end
end
        //下面的下降沿检测可以滤掉<20ns-40ns的毛刺(包括高脉冲和低脉冲毛刺),
        //这里就是用资源换稳定(前提是我们对时间要求不是那么苛刻,因为输入信号打了好几拍)
        //(当然我们的有效低脉冲信号肯定是远远大于40ns的)
assign neg_rs232_rx = rs232_rx3 & rs232_rx2 & ~rs232_rx1 & ~rs232_rx0;        //接收到下降沿后neg_rs232_rx置高一个时钟周期
这是一个边缘检测问题。这段代码你看看就明白了

出0入0汤圆

发表于 2012-11-28 23:09:13 | 显示全部楼层
ziruo2002ab 发表于 2012-11-20 22:16
lz的问题,如果是考虑到系统稳定性,最好的方法是
用系统时钟采样输入信号,就是多个触发器串联去采样输入 ...

恩恩。你这个说的就是边缘检测方法。你说的这个很原理。很明白 。能不能提供下这类问题原理方面的书或论文什么的

出0入0汤圆

发表于 2012-11-28 23:11:44 | 显示全部楼层
来学习

出0入0汤圆

发表于 2012-11-29 11:26:27 | 显示全部楼层
浮云残雪 发表于 2012-11-27 18:22
always @ (posedge clk or negedge rst_n) begin
        if(!rst_n) begin
                        rs232_rx0

问一下,这个问题和我的帖子:http://www.amobbs.com/thread-5509258-1-1.html
中描述的是一种问题吗? 是不是都是为了稳定才多打一拍的?

出200入657汤圆

发表于 2012-11-29 20:45:20 | 显示全部楼层
浮云残雪 发表于 2012-11-28 23:09
恩恩。你这个说的就是边缘检测方法。你说的这个很原理。很明白 。能不能提供下这类问题原理方面的书或论 ...

忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数字逻辑设计?? 不知

出0入0汤圆

发表于 2012-12-1 09:23:05 | 显示全部楼层
ziruo2002ab 发表于 2012-11-29 20:45
忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数 ...

好的。谢谢啦。

出0入0汤圆

发表于 2012-12-1 09:31:46 | 显示全部楼层
ziruo2002ab 发表于 2012-11-29 20:45
忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数 ...

数字设计原理与实践 韦克利(John F.Wakerly)

出0入0汤圆

发表于 2012-12-5 21:04:50 | 显示全部楼层
13楼的 小弟试了一下 晚一个十周周期 有更好的方法吗

出20入186汤圆

发表于 2012-12-5 21:11:19 | 显示全部楼层
zhangalex88 发表于 2012-11-22 18:30
我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多 ...


那假如上升沿置2,下降沿置7呢?
所以 assign 就不行了吧?

出0入0汤圆

发表于 2012-12-5 22:07:56 | 显示全部楼层
三种方法
1、用导线一条直接解决问题
2、两反向器串联
3、比较器一个

出0入0汤圆

发表于 2012-12-5 22:38:22 | 显示全部楼层
这个论坛果然很nb,一个这么小的问题大家都这么执着!!!受教了

出0入0汤圆

发表于 2012-12-6 20:54:26 | 显示全部楼层
yuyu87 发表于 2012-12-5 21:11
那假如上升沿置2,下降沿置7呢?
所以 assign 就不行了吧?

和assign一样直接赋值:
wire b=(a?2:7);
当然如果要附加条件,则另当别论。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表