Из кода в основном из образца myhdl:
from myhdl import Signal, intbv, delay, always, now, Simulation, toVerilog
__debug = True
def ClkDriver(clk):
halfPeriod = delay(10)
@always(halfPeriod)
def driveClk():
clk.next = not clk
return driveClk
def HelloWorld(clk, outs):
counts = intbv(3)[32:]
@always(clk.posedge)
def sayHello():
outs.next = not outs
if counts >= 3 - 1:
counts.next = 0
else:
counts.next = counts + 1
if __debug__:
print "%s Hello World! outs %s %s" % (
now(), str(outs), str(outs.next))
return sayHello
clk = Signal(bool(0))
outs = Signal(intbv(0)[1:])
clkdriver_inst = ClkDriver(clk)
hello_inst = toVerilog(HelloWorld, clk, outs)
sim = Simulation(clkdriver_inst, hello_inst)
sim.run(150)
Я ожидаю, что он сгенерирует программу Verilog, которая содержит блок initial
, например:
module HelloWorld(...)
reg [31:0] counts;
initial begin
counts = 32'h3
end
always @(...
Как вы можете сгенерировать блок initial
?
Обратите внимание, что в кеше Google для old.myhdl.org/doku.php/dev:initial_values он ссылается на пример https://bitbucket.org/cfelton/examples/src/tip/ramrom/ . Так что похоже, что функция должна поддерживаться. Однако образец рома генерирует статические операторы case. Это не то, что я ищу.