URL
https://opencores.org/ocsvn/or1k-cf/or1k-cf/trunk
Subversion Repositories or1k-cf
[/] [or1k-cf/] [trunk/] [src/] [reg.cf] - Rev 4
Compare with Previous | Blame | View Log
(*Single write port, dual read port register fileCopyright 2004 Ken RoseAll rights reserved*)-Tiscomponent T+WritePort +WriteAddr +WriteEnable +ReadAddr1 +ReadAddr2-ReadPort1 -ReadPort2withMkregs WriteEnables Registers RegWidthisif width WriteAddr != width ReadAddr1 {error "Register address widths differ"} endif width WriteAddr != width ReadAddr2 {error "Register address widths differ"} endRegWidth <- width WritePortcomponent Mkregs +WE -Regs isif width WE == 0Regs <- []elselocal R Write isWrite <- 'lsb' WER <- {reg RegWidth WritePort}{enable Write R}Regs <- R.out :: {Mkregs ('msbs' WE) $}endendendWriteEnables <- {decoder WriteEnable WriteAddr $}Registers <- {Mkregs WriteEnables $}ReadPort1 <- ((WriteAddr '==' ReadAddr1) '&' WriteEnable) 'then' WritePort 'else' {mux ReadAddr1 Registers $}ReadPort2 <- ((WriteAddr '==' ReadAddr2) '&' WriteEnable) 'then' WritePort 'else' {mux ReadAddr2 Registers $}{display '1' ({vector_of_string "Reg read addr1 is " $} '++' {bin_of_vector ReadAddr1 $} '++' {vector_of_string ", data1 is " $} '++' {hex_of_vector ReadPort1 $})}{display '1' ({vector_of_string "Reg read addr2 is " $} '++' {bin_of_vector ReadAddr2 $} '++' {vector_of_string ", data2 is " $} '++' {hex_of_vector ReadPort2 $})}{display WriteEnable ({vector_of_string "Reg write addr is " $} '++' {bin_of_vector WriteAddr $} '++' {vector_of_string ", data is " $} '++' {hex_of_vector WritePort $})}end
