我正在尝试从以下MyHDL模块生成verilog模块:
top.py:
from myhdl import *
from counter import Counter
def Top(clkIn, leds):
counter = Counter(clkIn, leds)
return counter
clkIn = Signal(bool(0))
leds = intbv(0)[8:0]
toVerilog(Top, clkIn, leds)和,
counter.py:
from myhdl import *
def Counter(clk, count):
c = Signal(modbv(0)[8:0])
@always(clk.posedge)
def logic():
c.next = c + 1
@always_comb
def outputs():
count.next = c
return logic, outputs但是,在生成的文件的模块定义中,(第1-3行)
顶五:
module top (
clkIn
);
input clkIn;
reg [7:0] counter_c;
always @(posedge clkIn) begin: TOP_COUNTER_LOGIC
counter_c <= (counter_c + 1);
end
assign count = counter_c;
endmoduleleds[7:0]失踪了。即使这些LED是未使用的,我需要他们为我的合成器分配他们到适当的插脚在开发板上。为什么MyHDL要忽略它们?我怎么才能把它们包括进去呢?
发布于 2017-01-14 15:46:50
将leds = intbv(0)[8:0]转换为leds = Signal(intbv(0)[8:0])。模块(输出)端口需要声明为Signal。
发布于 2017-01-14 08:21:42
在模块顶层设计中,您没有将leds声明为输出。在clkIn上定义了一个输入。大多数合成器将检查逻辑是否驱动输出或其他可见的,或保持逻辑。如果合成器确定没有任何可能的方式告诉您,leds是存在于设计外部,它可能只是优化它,以及任何专门的逻辑驱动它,走开。
如果这是Altera,有一个名为虚拟引脚的qsf分配,可以分配给leds,以保存它。但简单的事情是添加leds到模块顶部引脚定义,并分配它作为一个输出。
根据Alper的评论,您没有对任何事情进行计数。那需要解决。
此外,您也不能在计数器定义中初始化计数器。这可能在综合中起作用,因为逻辑要么将输入到零,要么输入其他确定性值,但在模拟中,该值可能(可能/将)仍然未知。如果可以的话,可以得到一个复位信号。
https://stackoverflow.com/questions/41602796
复制相似问题