[英]Output port missing in generated Verilog code from MyHDL
我正在嘗試從以下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行)
top.v:
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;
endmodule
leds[7:0]
丟失。 即使這些LED未使用,我的合成器也需要它們將它們分配給開發板上正確的引腳。 為什么MyHDL省略了它們? 以及如何使它們包括在內?
將leds = intbv(0)[8:0]
更改為leds = Signal(intbv(0)[8:0])
。 模塊(輸出)端口需要聲明為Signal
。
在模塊頂部設計中,沒有將led聲明為輸出。 在clkIn上定義了它,它是一個輸入。 大多數合成器都會檢查邏輯是否在驅動輸出或其他可見或保留的邏輯。 如果合成器確定沒有辦法告訴您外部存在設計中的LED,則它可能會將其優化,也可能將其專用的邏輯驅動掉。
如果這是Altera,則存在一個稱為虛擬引腳的qsf分配,可以將其分配給led,以保持不變。 但是,最簡單的方法是將led添加到模塊頂部引腳定義,並將其分配為out。
根據Alper的評論,您不會將Count分配給任何內容。 這需要解決。
另外,您不會在Counter定義中初始化counter。 這可能在綜合中起作用,因為邏輯將初始化為零或某個其他確定的值,但是在仿真中,該值可能(可能/將)保持未知。 如果可以的話,獲得復位信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.