1 vhdl
在我编写此语句时的编码中,它是模拟的,但不可综合。为什么?现在我该怎么做才能解决这个问题???
IF ((DS0='1' OR DS1='1')and rising_edge(DS0) and rising_edge(DS1) AND DTACK='1' AND BERR='1') THEN
RV0 <= not RV;
else
RV0 <= RV;
Run Code Online (Sandbox Code Playgroud)
在进行 FPGA 设计时,最重要的是考虑硬件。
FPGA 由许多硬件块组成,具有一组预先确定的输入和输出——您编写的代码需要能够映射到这些块。因此,即使您编写的代码在语法上是正确的,也不意味着它实际上可以映射到手头的硬件。
你的代码试图做的是:
IF ((DS0='1' OR DS1='1')and rising_edge(DS0) and rising_edge(DS1) AND DTACK='1' AND BERR='1') THEN
(...)
Run Code Online (Sandbox Code Playgroud)
如果DS0和DS1当前有上升沿(暗示它们也是'1',使第一部分(DS='1' OR DS1='1')变得多余),并且如果DTACK和BERR都是1,那么做一些事情。
这需要一个具有两个时钟输入的输入块(因为您有两个要同时测试上升沿的信号),而且我遇到的任何 FPGA 中都不存在这样的块 - 而且,这样的距离有多近两个时钟事件需要被视为“同时”?它实际上没有意义,除非您在某个时间间隔内指定它,例如通过使用实际时钟信号(在时钟信号进入触发器的时钟输入的意义上)进行采样DS0并DS1如图所示莫滕齐默斯回答。
通常,您希望在设计中使用一个专用时钟信号(然后对需要运行较慢的部分使用时钟使能),或者如果您需要设计的不同部分,则实现一些跨时钟域同步使用不同的时钟运行。
根据您使用的 IDE 环境,您可能可以访问一些用于设计各种块的语言模板,这可以帮助您正确描述可用的硬件块。在 Xilinx ISE 中,您可以在 Edit > Language Templates 中找到这些,然后,例如,查看 VHDL > Synthesis Constructs > Coding Examples > Flip Flops。
| 归档时间: |
|
| 查看次数: |
666 次 |
| 最近记录: |