Verilog FPGA仿真不';与实际表现不符

Verilog FPGA仿真不';与实际表现不符,verilog,fpga,Verilog,Fpga,我正在尝试编写一个verilog代码,它将在输入信号的正边缘和负边缘触发(我称之为“异步”)。我想要的输出是异步的每个边缘上的一个短的光点(与异步的频率相比),它从边缘('t1'和't3')稍微延迟,并且其持续时间可以控制('t2'和't4')。这些评论说明了我认为我的代码在做什么,但我对Verilog是新手,并不真正了解任何东西。感谢您的帮助 这是我的全部代码: `timescale 1ns / 1ps module attempt5(async, clk, o); input async

我正在尝试编写一个verilog代码,它将在输入信号的正边缘和负边缘触发(我称之为“异步”)。我想要的输出是异步的每个边缘上的一个短的光点(与异步的频率相比),它从边缘('t1'和't3')稍微延迟,并且其持续时间可以控制('t2'和't4')。这些评论说明了我认为我的代码在做什么,但我对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
该代码在合成器中工作,但当我尝试使用1 Hz方波测试代码的“异步”信号,并使用示波器监测“o”时,什么都没有发生

其他详情: 使用Xilinx XEM 6001 FPGA和ISE设计套件14.4
我测试的方法是将函数发生器连接到引脚A2,示波器连接到引脚C1,我看到的只是噪声。这里有没有什么明显的问题,可能是我没有正确连接到物理管脚之类的

您对
开关的第二个赋值将覆盖第一个赋值。这是一个总是块的性质

您的意图是为两条边创建一个边检测器,因此您需要“或”一个上升和下降边等式

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

#
延迟是不可合成的;日志文件中应该有一个警告。@Greg如果“#”延迟不可合成,是否有其他方法来实现延迟?您可以使用一个计数器,当您的
async
switch <= (resync[2] & !resync[3]) | (resync[3] & !resync[2]);
switch <= resync[2] ^ resync[3];