关于信号上升沿的检测,,没有头绪
思路: 两个时钟域。 一个是准备输出脉冲一直工作的时钟。 另一个是上升沿信号看作一个时钟。
reg isTriggered, output;
always @ (posedge edge)
isTriggered <= ~isTriggered;
reg [1:0] shift_reg;
always @ (posedge clk)
begin
shift_reg <= {shift_reg[0], shift_reg[1]};
shift_reg[0] <= isTriggered;
if (shift_reg[0] != shift_reg[1])
output <= 1;
else
output <= 0;
end
你的第一个always的敏感量是啥呀? 2# iceyo
你要检测的信号
那isTriggered是啥呀? 初学者,见笑了
4# iceyo
变量名称,你随便命名。 你可以看看入门的HDL语言的书。如果你还没有学过数字系统,要看看数字系统。
我的意思是这个变量的含义 6# iceyo
数字电路最基本的电路之一
两个D触发器+一个门
好,谢谢!
最基础问题;
采用一个时钟周期小于 你要检测的输入信号持续为高电平时间的这样一个检测时钟;(目的是能够采样到检测信号变高)
遵循异步时钟域采样规则, 打三拍,第三拍信号取反和第二拍相与即可。
不理解的话,画一下波形。
你检测到上升沿到产生脉冲信号中间的时间间隔是多少?如果是简单的同步产生,那么做一个简单的抓沿程序就好;如果是需要有一定的时间间隔,那就一个抓沿信号,然后做一个单稳态触发器,用此抓沿信号做单稳态触发器的触发信号就OK了
时钟域打拍是什么意思呀?
时钟域打拍ms就是加一级寄存器。
always @(...)
...
r2 <= r1;
...
11# 潇湘月色
没有规定脉冲宽度,,你说的抓沿程序是什么思路呀,,
