要在VHDL设计中提供顺序逻辑,我必须使用带有WARNING:googleapiclient.discovery_cache:file_cache is unavailable when using oauth2client >= 4.0.0 or google-auth
Traceback (most recent call last):
File "/Users/gil/anaconda3/envs/GA2DBenv/lib/python3.7/site-packages/googleapiclient/discovery_cache/__init__.py", line 36, in autodetect
from google.appengine.api import memcache
ModuleNotFoundError: No module named 'google.appengine'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/gil/anaconda3/envs/GA2DBenv/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 33, in <module>
from oauth2client.contrib.locked_file import LockedFile
ModuleNotFoundError: No module named 'oauth2client.contrib.locked_file'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/gil/anaconda3/envs/GA2DBenv/lib/python3.7/site-packages/googleapiclient/discovery_cache/file_cache.py", line 37, in <module>
from oauth2client.locked_file import LockedFile
ModuleNotFoundError: No module named 'oauth2client.locked_file'
的流程语句。从不同的来源我知道,敏感度列表是不可合成的结构,即是否可以合成以下代码:
sensitivity_list
...
process(c)
b <= a and c;
end process;
...
信号将不会有任何锁存器,这只是一个普通的AND门。但是,当我合成没有敏感度列表的代码时:
c
无论我选择哪个版本的VHDL,都会遇到相同的问题:
错误(10442):process_test.vhd(79)处的VHDL流程语句错误: 流程声明必须包含敏感度列表或等待 声明
我的问题是:为什么合成器关心灵敏度列表?以我的理解,它过于关注客户,这不是错误,而是严重的警告,甚至什么也没有,只有在模拟打开时才发出警告。
UPD。这是完整的代码和一些图像。我使用了Quartus Prime Standard 16.1
...
process
b <= a and c;
end process;
...
答案 0 :(得分:1)
逻辑合成器的工作是生成行为与您的RTL完全相同的电路。没有敏感度列表的过程,或者无法模拟无限循环的等待过程。因此,按照我的第一句话,逻辑合成器如何生成与您的RTL完全相同的电路?
这永远不会成为问题,因为在合成之前,您应该始终进行模拟。因此,您应该在逻辑合成器看到您的代码之前就已解决此问题。
答案 1 :(得分:1)
我认为您对sensitivity_list
有点困惑。 sensitivity_list
是触发process
激活的信号列表。每次sensitivity_list
中的信号之一发生变化时,process
都会被激活并评估语句。
在您的示例中:
process(c) begin
b <= a and c;
end process;
仅当c
更改时,该过程才被激活。这意味着b
更改时c
将采用新值,而a
更改时将保留旧值。这不是简单的组合“与”门的行为,合成时需要某种存储元件来存储b
的值。
为了推断一个简单的AND门,必须在sensitivity_list
中包括所有输入信号。可以通过以下方式手动完成:
process(a, c) begin
b <= a and c;
end process;
或者在VHDL 2008中自动使用关键字all
:
process(all) begin
b <= a and c;
end process;