verilog的新手,所以这可能是一个愚蠢的问题?在将“输入”网络分配给“输出”网络时是否应该考虑是否存在任何问题,或者这是不可能的?例如:
module TOP( CLK1, CLK2 );
input CLK1;
output CLK2;
assign CLK2 = CLK1;
endmodule
假设CLK1是50MHz时钟,仍然有效?
答案 0 :(得分:3)
是的,这是有效的。实际上,您正在描述最简单的模块:只有一条线连接CLK1
和CLK2
。像这样:
TOP
+---------------+
| |
CLK1 | |
------->-..... |
| . |
| . |
CLK2 | . |
-------<-..... |
| |
| |
+---------------+
合成时,您只需要记住合成器为从CLK1
到CLK2
传播信号所计算的延迟。当然,假设合成器实际上构建了这个模块。如果这个模块是更大设计的一部分,合成器可能(并且肯定会)在优化过程中吸收它。
无论是否对其进行优化,从CLK1
到CLK2
的路径必须存在,并且该路径将具有延迟,这将取决于发出信号的{{1}的宏单元/ CLB的位置{{ 1}}和CLK1
都在,它们将决定路由器构建的物理路径(使用更多的宏单元,CLB,BUFG或您的设备拥有的任何资源),您正在合成的设备的技术等等。
答案 1 :(得分:1)
你有效地将它们连接在一起仍然有效。
如果您可以使用verilog-2001,那么您可以定义为:
module TOP(
input CLK1,
output CLK2
);
assign CLK2 = CLK1;
endmodule
或定义为注册类型:
module TOP(
input CLK1,
output reg CLK2
);
always @* begin
CLK2 = CLK1;
end
endmodule
答案 2 :(得分:1)
您编写的代码不包含时间或延迟的概念。 CLK1
可能是50GHz,它仍然有效。
如果你真的在询问它是否可以合成功能正确的硬件,那就另当别论了。如果你正在合成一个现代FPGA,那么很可能它会正常工作。事实上,即使是平庸的合成器也只是将您的模块优化为电线。
如果要正确模拟Verilog,则需要担心测试平台中的timespec
说明符。此命令设置模拟的时间分辨率,因此您需要确保模拟器将看到时钟信号的变化。典型的默认分辨率为1ns,因此您可以再次使用。
对于模拟,您还可以确保添加到代码中的任何#delay
值与所需的时钟频率兼容。
答案 3 :(得分:1)
Verilog端口方向基本上是建议性的(与VHDL不同,它们是强制执行的)。您甚至可以写入输入端口。你可以做任何你想做的事情,虽然合成器有望捕获一些没有意义的东西。我这里没有LRM,但是查看端口方向强制。