Re: [myhdl-list] Strange problem, VALUES instead of symbols being toVerilog'ed
Brought to you by:
jandecaluwe
From: Jan D. <ja...@ja...> - 2008-05-07 15:34:41
|
I'm trying to understand your example: - I see that wb is passed as a parameter, but also returned by the module. Why is that necessary? - what is wb? if it's a class instance, as suggested by the code, I don't understand how you get to converted code at all. I tried it, and toVerilog chokes on return values that are not generators or sequences of generators. Did you perhaps modify some of the code in _extractHierarchy.py? Jan Oystein Homelien wrote: > Hello, this is my first post although I have lurked for some time. First > of all let me say that I simply love the idea of MyHDL. The simplicity > and power of python, direct to synthesizable verilog code.. yummie! > > Second I must admit that I am a newbie, so be nice with me. I have done > some stuff with MyHDL and stumbled upon some of its (or verilog's?) > limitations wrt verilog conversion. So far I have been able to work > around all of them, but now I am stuck. > > I am adding a myhdl "uart" module to my project. The instance is in the > file uart.py, def uart(). Here's the start of it: > > def uart(wb, baudclk, rxd, txd): > wb_rst_i, wb_clk_i, wb_adr_i, wb_dat_o, wb_dat_i, wb_we_i, wb_sel_i, wb_stb_i, wb_ack_o, wb_cyc_i > = wb.rst_i, wb.clk_i, wb.adr_i, wb.dat_o, wb.dat_i, wb.we_i, wb.sel_i, wb.stb_i, wb.ack_o, wb.cyc_i > ; > char = Signal(bool(0)); > send = Signal(bool(0)); > sending = Signal(bool(0)); > send_done = Signal(bool(0)); > > @always(wb_clk_i.posedge) > def registers(): > wb_ack_o.next = False > if wb_cyc_i: > if wb_we_i: > char.next = wb_dat_i > send.next = True > else: > wb_dat_o.next = concat(intbv(0x11)[5:], rxd, send, sending) > wb_ack_o.next = True > > .. as you can see I am "exploding" a wishbone bus in the beginning, and > then declaring some internal registers (at least this is what I am trying > to do). But, registers() is converted into the following verilog: > > always @(posedge wb_clk_i) begin: POWERSOC_I_UART_0 > uart_ack_o <= 0; > if (uart_cyc_i) begin > if (wb_we_o) begin > False <= wb_dat_o; <-- LOOK HERE > False <= 1; <-- AND HERE > end > else begin > uart_dat_o <= {5'h11, rxd, False, False}; <-- AND HERE > end > uart_ack_o <= 1; > end > end > > .. it seems as though the _values_ of my vars are being written to verilog > instead of the symbol names. What am I doing wrong? It only happens with > the uart, and I have tried all kinds of strange things to make it work. Of > course this does not synthesize (i use Xilinx' tools). :-) > > I have put a zip file with design files for you to try yourself > (./powersoc), at http://home.powertech.no/oystein/myhdl-bug1.zip . > > For the record, I have tried it with the following myhdl versions: > > drwxr-xr-x 8 oystein oystein 4096 2008-05-07 12:51 myhdl-0.5.1dev1 > -rw-r--r-- 1 oystein oystein 768032 2008-05-07 12:50 myhdl-0.5.1dev1.tar.gz > drwxr-xr-x 7 oystein oystein 4096 2008-05-07 12:48 myhdl-0.5c1 > -rw-r--r-- 1 oystein oystein 760268 2008-05-07 12:47 myhdl-0.5c1.tar.gz > drwxr-xr-x 6 oystein oystein 4096 2008-05-07 12:47 myhdl-0.6dev6 > -rw-r--r-- 1 oystein oystein 156404 2008-05-07 12:46 myhdl-0.6dev6.tar.gz > drwxr-xr-x 6 oystein oystein 4096 2008-05-07 10:24 myhdl-0.6dev8 > -rw-r--r-- 1 oystein oystein 181734 2008-05-07 10:23 myhdl-0.6dev8.tar.gz > > .. i could not get it working. Hope to get some input on how to work > around this. > > yours, > oystein > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by the 2008 JavaOne(SM) Conference > Don't miss this year's exciting event. There's still time to save $100. > Use priority code J8TL2D2. > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone -- Jan Decaluwe - Resources bvba - http://www.jandecaluwe.com Kaboutermansstraat 97, B-3000 Leuven, Belgium From Python to silicon: http://myhdl.jandecaluwe.com |