首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog 'assign‘语句

Verilog 'assign‘语句
EN

Stack Overflow用户
提问于 2014-01-10 04:31:30
回答 4查看 2.6K关注 0票数 2

新的verilog,所以这可能是一个愚蠢的问题?在将'input‘网络分配给'output’网络时,有没有我应该考虑的问题,或者这是不可能的?例如:

代码语言:javascript
复制
module TOP( CLK1, CLK2 );

    input CLK1;  
    output CLK2;

    assign CLK2 = CLK1;

endmodule

假设CLK1是一个50 was的时钟,仍然有效吗?

EN

回答 4

Stack Overflow用户

发布于 2014-01-10 07:18:04

是的,它是有效的。实际上,您描述的是最简单的模块:它只有一条连接CLK1CLK2的线路。如下所示:

代码语言:javascript
复制
               TOP
        +---------------+
        |               | 
CLK1    |               |
------->-.....          |
        |    .          |
        |    .          |
CLK2    |    .          |
-------<-.....          | 
        |               |
        |               | 
        +---------------+

在进行合成时,您只需记住合成器为将信号从CLK1传播到CLK2所计算的延迟。当然,假设合成器实际上构建了这个模块。如果这个模块是更大设计的一部分,合成器可能(也肯定会)在优化过程中吸收它。

无论是否对其进行了优化,从CLK1CLK2的路径都必须存在,并且该路径将有延迟,这将取决于信号CLK1CLK2所在的宏小区/CLB的位置,这反过来将决定路由器构建的物理路径(使用更多的宏小区、CLB、BUFG或您的设备拥有的任何资源),以及您正在合成的设备的技术,等等。

票数 3
EN

Stack Overflow用户

发布于 2014-01-10 04:37:37

它仍然是有效的,你有效地将它们连接在一起。

如果您可以使用verilog-2001,那么您可以定义为:

代码语言:javascript
复制
module TOP(
  input  CLK1,  
  output CLK2
);

  assign CLK2 = CLK1;

endmodule

或定义为reg类型:

代码语言:javascript
复制
module TOP(
  input      CLK1,  
  output reg CLK2
);

  always @* begin
    CLK2 = CLK1;
  end

endmodule
票数 1
EN

Stack Overflow用户

发布于 2014-01-10 07:01:26

您编写的代码不包含时间或延迟的概念。CLK1可以是50 and,但它仍然有效。

如果你真的在问它是否可以被合成到功能正确的硬件上,那就是另一回事了。如果你正在合成一个现代的FPGA,那么它很可能会工作得很好。事实上,即使是一个平庸的合成器也只会将你的模块优化成一条线。

如果您想要正确地模拟Verilog,那么您需要担心测试平台中的timespec说明符。此命令设置模拟的时间分辨率,因此您希望确保模拟器将看到时钟信号中的变化。典型的默认分辨率为1 is,因此您也可以正常使用。

对于模拟,您还可以确保添加到代码中的任何#delay值都与所需的时钟频率兼容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21030504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档