Asynchronous double port RAM

Nicolas Pinault <[email protected]> Mon, 11 Jan 2016 10:34:19 +0100
Newsgroups gmane.comp.python.myhdl
Message-ID <[email protected]>
Hi,

I am experimenting with asynchronous DPR (ie : with 2 clock domains)

Here is my code :

def MemoryGene1000Hz(
                      # Port A
                      clka,
                      addra,
                      wea,
                      dia,
                      ena,
                      doa,

                      # Port B
                      clkb,
                      addrb,
                      web,
                      dib,
                      enb,
                      dob
                     ):

     data_length = len(dia)

     # Instanciate RAM array
     ram = [Signal(intbv(0)[data_length:]) for i in range(2**len(addra))]

     # Init RAM with full scale sinus (48 samples)
     scale_factor = (2**(data_length-1)) - 1
     for i in range(48) :
         v = int(sin(i*2*pi/48) * scale_factor)
         ram[i] = Signal(intbv(v)[data_length:])
         #print(i, "%6.6X" % ram[i])

     @always(clka.posedge)
     def portA():
         if ena :
             doa.next = ram[addra]
             if wea :
                 ram[addra].next = dia

     @always(clkb.posedge)
     def portB():
         if enb :
             dob.next = ram[addrb]
             if web :
                 ram[addrb].next = dib

     return portA, portB


def convert():
     from myhdl import toVHDL

     clka  = Signal(bool(0))
     addra = Signal(intbv(0)[8:])
     wea   = Signal(bool(0))
     dia   = Signal(intbv(0)[24:])
     ena   = Signal(bool(0))
     doa   = Signal(intbv(0)[24:])

     clkb  = Signal(bool(0))
     addrb = Signal(intbv(0)[8:])
     web   = Signal(bool(0))
     dib   = Signal(intbv(0)[24:])
     enb   = Signal(bool(0))
     dob   = Signal(intbv(0)[24:])

     toVHDL.directory = "../vhdl"
     #toVHDL.std_logic_ports = True
     toVHDL(MemoryGene1000Hz,
            clka,
            addra,
            wea,
            dia,
            ena,
            doa,

            clkb,
            addrb,
            web,
            dib,
            enb,
            dob
           )

The generated VHDL code is not correct.
ram array is declared as a signal while this is not correct since 2 
processes access this object.
ram array should be declared as a shared variable. Right ?

Simulation seems to be ok.

Nicolas

-- 
*Nicolas PINAULT
R&D electronics engineer
*** [email protected] <mailto:[email protected]>

*AATON-Digital*
38000 Grenoble - France
Tel +33 4 7642 9550

http://www.aaton.com
http://www.transvideo.eu
French Technologies for Film and Digital Cinematography

Follow us on Twitter
@Aaton_Digital
@Transvideo_HD

Like us on Facebook
https://www.facebook.com/AatonDigital

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140

_______________________________________________
myhdl-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/myhdl-list