【发布时间】:2019-04-30 21:33:55
【问题描述】:
外部触发信号被发送到 FPGA。只有当and1 和and2 在接收到触发时也为高电平时,才应接受触发信号。如果触发被接受,则应创建一个持续时间为 10 微秒的触发输出脉冲。目标是尽量减少 FPGA 接受/拒绝这个外部触发信号的时间。
module trigger(
input CLK,
input trigger,
input and1,
input and2,
output triggerOut,
);
解决方案的第一次尝试如下;
assign triggerOut = trigger & and1 & and2;
反应时间很快,但我认为这不允许实现 10 微秒的触发持续时间。
目前的解决方案如下;
always @(posedge CLK) begin
if(trigger & and1 & and2)
triggerOut <= 1;
end
此解决方案允许添加一个计数器,从而实现 10 微秒触发脉冲。需要注意的是,现在对外部触发器的反应时间与 CLK 的频率有关。提高 CLK 频率可以提高反应时间,但提高 CLK 的频率是有限度的。
另一种可能的解决方案可能是对不断变化的触发输入敏感;
always @(posedge trigger) begin
if(trigger & and1 & and2)
triggerOut <= 1;
end
我已经读到这可能是不好的做法。我不清楚为什么使用@(posedge CLK) 优于@(posedge 触发器)。什么定义了 FPGA 对@(posedge trigger) 等灵敏度的反应时间?我想这仍然必须以某种方式与 CLK 相关联 - 这种方法可能更快吗?
有没有更好的方法来提高对触发器输入的反应时间?
【问题讨论】:
-
如果触发器是 FPGA 内部的时钟,这是一个不错的做法。也就是说,它绑定到时钟输入焊盘,和/或分配给 FPGA 内的全局缓冲区。需要注意的是,10us 计数器仍应绑定到 clk,这将导致跨域时钟问题,其中由 CLK 控制的顺序块必须接受与 CLK 不同步但与 TRIGGER 同步的输入。
-
无论如何,无论您检测到 TRIGGER 的速度有多快。只要将 10us 计数器绑定到 CLK,反应时间就可以慢到一个完整的 CLK 周期。