如何让一个信号,在另一个信号上升沿置1,下降沿置0?
咨询大家一个问题:如何让一个信号,在另一个信号上升沿置1,下降沿置0?如下的信号a,信号b 在信号a上升沿置位1,下降沿置位为0
always @(posedge a)
b <=1'b1;
always @( negedgea)
b<=1'b0;
希望达到这样的效果,但这样写编译一定通过不了,
大家都用什么办法实现这样的功能? 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
仅供参考! ab8780000 发表于 2012-11-20 20:19 static/image/common/back.gif
always @(posedge clk(大时钟) or negedge rst_n)
begin
if(!rst_n) b
这种方法不就又多了两个变量了么?
关注 always @(posedge a or negedgea)
if (a) b <=1'b1;
else
b<=1'b0;
这样呢?
未验证 其实我觉得应该还有更简单的
assign b=a; 记得一个变量只能在一个进程里赋值 干吗不直接用a?
支持5楼。 always @(posedge a)
if(rst) m <=0;
else m <=~m;
always @( negedgea)
if(rst) n <=0;
else n <=~n;
assign b = m ^ n; 各位,逻辑电路不是C语言 什么叫hdl,就是hardware description language
用软件思维来写是很恐怖的 lz的问题,如果是考虑到系统稳定性,最好的方法是
用系统时钟采样输入信号,就是多个触发器串联去采样输入信号
然后下降沿和上升沿其实也很容易获取
就是前一个触发器 AND 后一个触发器的反
或者 前一个触发器的反 AND 后一个触发器
即可检出上升下降沿脉冲
这个是跨时钟域处理的最基础的问题
我不是做逻辑的,具体找书去 如果没有其他附加条件的话,5楼正解…… 个人感觉如果要稳定,这样行不行?
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 谢谢 ,应该效果不错 {:smile:} 13楼是推荐的写法 我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多代码来实现明摆着的东西?
学术研究?让信号与时钟同步?让信号延时2个时钟?
楼主,你看呢? 用模拟比较器 zhangalex88 发表于 2012-11-22 18:30 static/image/common/back.gif
我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多 ...
消除组合电路的毛刺现象 5楼应该是可以的 简单实用
如果有毛刺应该从另外的角度去去除而不是把它搞复杂 学习了。13楼应该可以。 to yuyu87
这里没有进程,是电路布线,布线后应该是并连或串连的电路 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置高一个时钟周期
这是一个边缘检测问题。这段代码你看看就明白了 ziruo2002ab 发表于 2012-11-20 22:16 static/image/common/back.gif
lz的问题,如果是考虑到系统稳定性,最好的方法是
用系统时钟采样输入信号,就是多个触发器串联去采样输入 ...
恩恩。你这个说的就是边缘检测方法。你说的这个很原理。很明白 。能不能提供下这类问题原理方面的书或论文什么的 来学习
{:smile:} 浮云残雪 发表于 2012-11-27 18:22 static/image/common/back.gif
always @ (posedge clk or negedge rst_n) begin
if(!rst_n) begin
rs232_rx0
问一下,这个问题和我的帖子:http://www.amobbs.com/thread-5509258-1-1.html
中描述的是一种问题吗? 是不是都是为了稳定才多打一拍的? 浮云残雪 发表于 2012-11-28 23:09 static/image/common/back.gif
恩恩。你这个说的就是边缘检测方法。你说的这个很原理。很明白 。能不能提供下这类问题原理方面的书或论 ...
忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数字逻辑设计?? 不知 ziruo2002ab 发表于 2012-11-29 20:45 static/image/common/back.gif
忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数 ...
好的。谢谢啦。 ziruo2002ab 发表于 2012-11-29 20:45 static/image/common/back.gif
忘了,不好意思
反正是一本数字电路逻辑设计经典,最让人印象深刻的第一句话就是:Hi, I'm John.
叫:数 ...
数字设计原理与实践 韦克利(John F.Wakerly) 13楼的 小弟试了一下 晚一个十周周期 有更好的方法吗 zhangalex88 发表于 2012-11-22 18:30 static/image/common/back.gif
我是6楼,难道就5楼和12楼和我的思维一致?
a信号本身就是在上升沿变为1,下降沿变为0,为什么还要写那么多 ...
那假如上升沿置2,下降沿置7呢?
所以 assign 就不行了吧? 三种方法
1、用导线一条直接解决问题
2、两反向器串联
3、比较器一个 这个论坛果然很nb,一个这么小的问题大家都这么执着!!!受教了 yuyu87 发表于 2012-12-5 21:11 static/image/common/back.gif
那假如上升沿置2,下降沿置7呢?
所以 assign 就不行了吧?
和assign一样直接赋值:
wire b=(a?2:7);
当然如果要附加条件,则另当别论。
页:
[1]