Re: [myhdl-list] List of Signals == Memory
Brought to you by:
jandecaluwe
|
From: Christopher L. F. <cf...@uc...> - 2008-02-22 13:50:47
|
>> This seems to break a very natural way of writing HDL
>> in python.
The above is definitely a very subjective statement/argument. Came to
this conclusion based on my own experience and the other posts. I
don't think I articulated my suggestion well. I believe I understand
the issues that led to the current implementation (I hope).
I see that the following may not be desired to be converted directly
x = [Signal(intbv(0)[8:]) for i in range(4)]
@always(clk.posedge)
def rtl():
for i in range(N):
x[i] = i
...
Converted to Verilog as
reg [7:0] x [0:3];
always @(posedge clk) begin
for (i=0; i<4; i=i+1) begin
x[i] <= i;
end
end
In the above example, this is where the Verilog synthesis tools may
get in trouble because it could infer a block of memory. The memory
may not be what the original description was intending.
What I would like to propose is that the toVerilog/toVhdl does a
little bit more work. When it comes across a list of signals it
converts the original MyHDL to the following Verilog.
reg [7:0] x_los_0;
reg [7:0] x_los_1;
reg [7:0] x_los_2;
reg [7:0] x_los_3;
always @(posedge clk) begin
x_los_0 <= 0;
x_los_1 <= 1;
x_los_2 <= 2;
x_los_3 <= 3;
end
The Verilog/VHDL conversion will unroll the loops so list of signals
can be used as generic containers etc. This way the conversion is
explicit and won't have the potential to confuse the Verilog/VHDL
synthesis tools.
Then there is the issue of actually describing RAM/ROM and co-
simulation. I believe those are solvable issues if the loop-unrolling
method was adopted.
I believe that the list extraction would allow a MyHDL developer to
use lists in a very natural way, and the lists would always be
expanded. This way you could have complex structures, list of
signals, inside a list, the python parse/converter will get to the
primitive type (in this case a signal) and create a unique name that
represents the structure.
I have looked at the conversion python code some, I believe I know
where these changes / enhancements could coded. Maybe after some more
hashing, if this change seems to make sense I can attempt the change.
> that you're now all struggling with :-)
>
> Before doing anything else, I believe we should now review the
> assumptions.
> Synthesis tools have evolved and so has Verilog in the mean time.
> Based on
> that info, we may be able to do something sensible - otherwise we are
> walking in the dark.
>
> Specifically, I'd like to know how memory syntax (including member
> slicing
> and indexing) is currently supported in (System)Verilog, and in
> mainstream
> synthesis tools. Anyone with useful info on this - please let us know.
Personally, I like sticking with Verilog 1364-1995(2001), using basics
of the language and converting more complex MyHDL structures to basic
Verilog. This puts more work in the conversion tools and kinda goes
against the minimalist approach (doh).
> I refer to the thread "RAM inference from toVerilog output" dated
> 08/09/2005.
> This announces the first release with RAM inteference support.
Hopefully I am not repeating the previous thread (I don't think so), I
will study this thread a little more.
Thanks for the reply and all the work on MyHDL!
|