mirror of
				https://github.com/Klagarge/Cursor.git
				synced 2025-10-31 14:09:17 +00:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
							
								
								
									
										55
									
								
								Libs/Memory/hdl/bram_dualport_writefirst.vhd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Libs/Memory/hdl/bram_dualport_writefirst.vhd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| USE std.textio.all; | ||||
|  | ||||
| ARCHITECTURE bhv OF bramContentDualportWritefirst IS | ||||
|   -- Define ramContent type | ||||
|   type ramContentType is array(0 to (2**addr_bit_nb)-1) of bit_vector(data_bit_nb-1 DOWNTO 0); | ||||
|  | ||||
|   -- Define function to create initvalue signal | ||||
|   impure function ReadRamContentFromFile(ramContentFilenAme : in string) return ramContentType is | ||||
|     FILE     ramContentFile     : text is in ramContentFilenAme; | ||||
|     variable ramContentFileLine : line; | ||||
|     variable ramContent         : ramContentType; | ||||
|   begin | ||||
|     for i in ramContentType'range loop | ||||
|       readline(ramContentFile, ramContentFileLine); | ||||
|       read(ramContentFileLine, ramContent(i)); | ||||
|     end loop; | ||||
|     return ramContent; | ||||
|   end function; | ||||
|  | ||||
|   -- Declare ramContent signal | ||||
|   shared variable ramContent: ramContentType := ReadRamContentFromFile(init_file); | ||||
|  | ||||
| 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; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user