42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
| USE std.textio.all;
 | |
| 
 | |
| ARCHITECTURE bhv OF bramDualport IS
 | |
|   -- Define ramContent type
 | |
|   type ramContentType is array(0 to (2**addressBitNb)-1) of bit_vector(dataBitNb-1 DOWNTO 0);
 | |
| 
 | |
|   -- Declare ramContent signal
 | |
|   shared variable ramContent: ramContentType;
 | |
| 
 | |
| BEGIN
 | |
|   -- Port A
 | |
|   process(clockA)
 | |
|   begin
 | |
|     if clockA'event and clockA='1' then
 | |
|       if enA = '1' then
 | |
|         if writeEnA = '1' then
 | |
|           dataOutA <= dataInA;
 | |
|           ramContent(to_integer(unsigned(addressA))) := to_bitvector(dataInA,'0');
 | |
|         else
 | |
|           dataOutA <= to_stdulogicvector(ramContent(to_integer(unsigned(addressA))));
 | |
|         end if;
 | |
|       end if;
 | |
|     end if;
 | |
|   end process;
 | |
| 
 | |
|   -- Port B
 | |
|   process(clockB)
 | |
|   begin
 | |
|     if clockB'event and clockB='1' then
 | |
|       if enB = '1' then
 | |
|         if writeEnB = '1' then
 | |
|           ramContent(to_integer(unsigned(addressB))) := to_bitvector(dataInB,'0');
 | |
|           dataOutB <= dataInB;
 | |
|         else
 | |
|           dataOutB <= to_stdulogicvector(ramContent(to_integer(unsigned(addressB))));
 | |
|         end if;
 | |
|       end if;
 | |
|     end if;
 | |
|   end process;
 | |
| 
 | |
| END ARCHITECTURE bhv;
 |