【问题标题】:FPGA simulation doesn't match actual performanceFPGA 仿真与实际性能不符
【发布时间】:2015-08-04 07:28:36
【问题描述】:

我正在尝试编写一个 Verilog 代码,该代码将在输入信号的上升沿和下降沿触发(我称之为“异步”)。我想要的输出是异步的每个边缘上的一个短信号(与异步频率相比),它从边缘('t1'和't3')略微延迟并且其持续时间可以控制('t2'和' t4')。 cmets 说我认为我的代码在做什么,但我是 Verilog 的新手,并且什么都不懂。任何帮助表示赞赏。

这是我的完整代码:

`timescale 1ns / 1ps

module attempt5(async, clk, o);

input async; 
input clk;
reg switch = 1'b0; //will tell me when async changes
reg [1:3] resync = 3'b000;
reg counter = 1'b0; //keeping track of which edge of async we're on
output reg o = 1'b0; 

parameter t1 = 0;
parameter t2 = 100000000;
parameter t3 = 0;
parameter t4 = 100000000;

always @ (posedge clk)
begin
switch <= resync[2] & !resync[3];
switch <= resync[3] & !resync[2];
resync <= {async, resync[1:2]};
end
//^^I'm pretty sure this makes the 'switch' register switch very quickly when 'async' changes  
//I've included this always block because I wanted to sync my input signal to the clock, because I read that FPGAs don't do well with asynchronous stuff 


always @ (posedge switch)
if (counter == 1) begin
counter = 0;
#t1 o <= ~o;
#t2 o <= ~o;
end else begin
counter = 1;
#t3 o <= ~o;
#t4 o <= ~o;
end
//^^ When the 'switch' register changes, start the the short blip
endmodule

还有我的约束文件:

NET "clk" TNM_NET = "clk";
TIMESPEC TS_clk = PERIOD "clk" 20 ns HIGH 50 %;
NET "switch" TNM_NET = "switch";
TIMESPEC TS_switch = PERIOD "switch" TS_clk  HIGH 50 %;

NET "async" LOC = A2;
NET "o" LOC = C1;
INST "clk_BUFGP" LOC = F1;
NET "clk" LOC = F1;

NET "o" SLEW = FAST;

代码在合成器中工作,但是当我尝试使用 1 Hz 方波的“异步”信号测试代码并使用示波器监控“o”时,没有任何反应。

其他细节: 使用 Xilinx XEM 6001 FPGA 和 ISE Design Suite 14.4 我测试的方法是将函数发生器连接到引脚 A2,将示波器连接到引脚 C1,我看到的只是噪音。这里有什么明显的问题吗,也许是我实际上没有正确连接到物理引脚之类的?

【问题讨论】:

  • # 延迟无法合成;日志文件中应该会出现警告。
  • @Greg 如果 '#' 延迟不可合成,还有其他方法可以实现延迟吗?
  • 您可以使用一个计数器,当您的 async 检测到更改时重置该计数器

标签: verilog fpga


【解决方案1】:

您对switch 的第二个分配覆盖了第一个。这就是永远阻塞的本质......

您的意图是为两个边缘创建一个边缘检测器,因此您需要“或”一个上升沿和下降沿方程。

switch <= (resync[2] & !resync[3]) | (resync[3] & !resync[2]);

或者您使用适当的布尔运算符xor(又名不等于)。

switch <= resync[2] ^ resync[3];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2013-11-27
    • 2010-11-07
    相关资源
    最近更新 更多