修复Verilog中的“多个驱动程序”错误

海鸥

我有一些用Verilog编写的代码,模拟效果很好,但是综合(当然是我期望的是)却不能。我收到有关正在使用多个驱动程序的错误。这是将导致此错误的基本代码(不是真正的代码,因为此时约300行):

always @(posedge reset) begin
   A <= 0;
   B <= 0;
   C <= 0;
   ...
end

always @(posedge D) begin
   case (E)
     0: do something
     1: do something else
     2: begin C <= B; A <= 1; end 
     default: ...
end

always @(posedge A) begin
   B <= 1;
   A <= 0;
end

因此,我的想法是,我希望本质上具有顺序代码,但是不允许混合使用阻塞代码和非阻塞代码,因此我需要使用非阻塞语句。C <= B必须在B <= 1之前发生,因为我希望C具有B的旧值。因此,我认为我将实质上以A的形式插入一个标志,以在C获得其值后对B进行更改。

我不知道该如何解决。如果它们必须100%不相关,那么我也根本不理解允许根本存在多个进程的意义(特别是因为仿真没有警告这是一个问题)。

我知道不能保证姿势D和姿势A不会同时发生,但我知道它们不会同时发生。有没有办法告诉编译器呢?

谢谢!

恩莫尔

我知道不能保证姿势D和姿势A不会同时发生,但我知道它们不会同时发生。

是的,但是就像您说的那样,编译器不知道这一点,并且会抱怨。您必须确保您没有从多个Always块中驱动变量。

为此,请使用用例语句。例如:

always @(posedge clk) begin // or some common condition
  case (reset)
    0:
    // do stuff, and use nested case statements
    1:
    // reset
    ...
end

而且,以防万一,您想使用case语句而不是if语句,因为编译器可以使用case语句更好地优化代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Laravel:错误[PDOException]:在PostgreSQL中找不到驱动程序

使用了错误的JDBC驱动程序?

如何修复在Linux内核SPI驱动程序中始终无法通过验证的SPI驱动程序

如何使用python修复Selenium Web驱动程序``异常错误''

关于电线上的多个驱动程序的问题,错误:[DRC MDRV-1]多个驱动程序网:网络led_OBUF [0]具有多个驱动程序:led_OBUF [0] _inst_i_1 / O

如何修复hostapd无效/未知驱动程序'nl80211'错误?

NHibernate中的多个数据库驱动程序

Verilog多个驱动程序

laravel应用中的beantalkd驱动程序配置错误

在Java中找不到合适的驱动程序错误?

Linux驱动程序中的分段错误

如何修复“错误-[ICPSD]驱动程序的无效组合”?

Laravel:错误[PDOException]:在MySQL中找不到驱动程序

添加驱动程序中没有驱动程序

如何修复不良的显示驱动程序?

如何修复psqlodbc驱动程序中的缓冲区溢出

如何修复ryzen处理器的驱动程序错误(代码32)?

解析PHP Web驱动程序中的错误

Ojdbc驱动程序错误

Nvidia驱动程序安装错误

修复或重建驱动程序存储

多个 chrome 驱动程序实例

连接器/J 8.0 驱动程序中的错误

连接到多个驱动程序或错误同步描述的问题

appium 驱动程序在 URL 中显示错误

如何修复 VirtualBox 中的“内核驱动程序无法访问”?

OJDBC 驱动程序中的 Cloudera QuickStart VM Sqoop 错误

如何避免verilog中的多个常量驱动程序

Verilog:了解双向信号上的多个驱动程序