新的verilog,所以这可能是一个愚蠢的问题?在将'input‘网络分配给'output’网络时,有没有我应该考虑的问题,或者这是不可能的?例如:
module TOP( CLK1, CLK2 );
input CLK1;
output CLK2;
assign CLK2 = CLK1;
endmodule假设CLK1是一个50 was的时钟,仍然有效吗?
发布于 2014-01-10 07:18:04
是的,它是有效的。实际上,您描述的是最简单的模块:它只有一条连接CLK1和CLK2的线路。如下所示:
TOP
+---------------+
| |
CLK1 | |
------->-..... |
| . |
| . |
CLK2 | . |
-------<-..... |
| |
| |
+---------------+在进行合成时,您只需记住合成器为将信号从CLK1传播到CLK2所计算的延迟。当然,假设合成器实际上构建了这个模块。如果这个模块是更大设计的一部分,合成器可能(也肯定会)在优化过程中吸收它。
无论是否对其进行了优化,从CLK1到CLK2的路径都必须存在,并且该路径将有延迟,这将取决于信号CLK1和CLK2所在的宏小区/CLB的位置,这反过来将决定路由器构建的物理路径(使用更多的宏小区、CLB、BUFG或您的设备拥有的任何资源),以及您正在合成的设备的技术,等等。
发布于 2014-01-10 04:37:37
它仍然是有效的,你有效地将它们连接在一起。
如果您可以使用verilog-2001,那么您可以定义为:
module TOP(
input CLK1,
output CLK2
);
assign CLK2 = CLK1;
endmodule或定义为reg类型:
module TOP(
input CLK1,
output reg CLK2
);
always @* begin
CLK2 = CLK1;
end
endmodule发布于 2014-01-10 07:01:26
您编写的代码不包含时间或延迟的概念。CLK1可以是50 and,但它仍然有效。
如果你真的在问它是否可以被合成到功能正确的硬件上,那就是另一回事了。如果你正在合成一个现代的FPGA,那么它很可能会工作得很好。事实上,即使是一个平庸的合成器也只会将你的模块优化成一条线。
如果您想要正确地模拟Verilog,那么您需要担心测试平台中的timespec说明符。此命令设置模拟的时间分辨率,因此您希望确保模拟器将看到时钟信号中的变化。典型的默认分辨率为1 is,因此您也可以正常使用。
对于模拟,您还可以确保添加到代码中的任何#delay值都与所需的时钟频率兼容。
https://stackoverflow.com/questions/21030504
复制相似问题