📄 host_icomp.vhd
字号:
-- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- First control register for Mem dwordCount := 1; regData(0) := 16#00000080#; -- Offset : bits 31 downto 23 = 0x000 -- Address : bits 22 downto 0 = 0x000 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Write the memory access type and DWORD count -- to the second control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000001#; -- Second control register for Left Mem dwordCount := 1; regData(0) := 16#00000018#; -- Write_Sel_n : bit 20 = 0 -- DWORD count : bits 7 downto 0 = 256 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Trigger the memory write by writing to the third register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000003#; -- Third control register for Left Mem dwordCount := 1; regData(0) := 16#00000000#; -- Don't care WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Read the status of the memory write -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- Status register for Left Mem dwordCount := 1; Done := FALSE; while ( not Done ) loop WS_ReadPeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); if ( regData(0) mod 2 = 1 ) then assert FALSE report "PE1 Data Write to 0x1000 has completed" severity NOTE; Done := TRUE; end if; wait for 1 us; end loop; -------------------------------------------------------------------- -- -- Fill up the block RAM with data to be written to memory. -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000100#; -- Block RAM for Mem dwordCount := 24; memData(0) := 16#e3a01040#; memData(1) := 16#e3a02902#; memData(2) := 16#e5812000#; memData(3) := 16#ed912f00#; memData(4) := 16#e3a02c02#; memData(5) := 16#e3822003#; memData(6) := 16#e5812000#; memData(7) := 16#ed915f00#; memData(8) := 16#ed811f00#; memData(9) := 16#e5912000#; memData(10) := 16#e3822a12#; memData(11) := 16#e5812000#; memData(12) := 16#ed911f00#; memData(13) := 16#e10f2000#; memData(14) := 16#e3c220ff#; memData(15) := 16#e38220d0#; memData(16) := 16#e129f002#; memData(17) := 16#e3a0d806#; memData(18) := 16#e24dd004#; memData(19) := 16#e3a0f902#; memData(20) := 16#ffffffff#; memData(21) := 16#00000000#; memData(22) := 16#ffffffff#; memData(23) := 16#00000000#; WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, memData ); -------------------------------------------------------------------- -- -- Write the memory access type and DWORD count -- to the second control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000001#; -- Second control register for Left Mem dwordCount := 1; regData(0) := 16#00000018#; -- Write_Sel_n : bit 20 = 0 -- DWORD count : bits 7 downto 0 = 256 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Write the block RAM buffer offset and memory address -- to the first control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- First control register for Mem dwordCount := 1; regData(0) := 16#00000400#; -- Offset : bits 31 downto 23 = 0x000 -- Address : bits 22 downto 0 = 0x000 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Trigger the memory write by writing to the third register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000003#; -- Third control register for Left Mem dwordCount := 1; regData(0) := 16#00000000#; -- Don't care WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Read the status of the memory write -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- Status register for Left Mem dwordCount := 1; Done := FALSE; while ( not Done ) loop WS_ReadPeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); if ( regData(0) mod 2 = 1 ) then assert FALSE report "PE1 Data write to 0x3000 has completed" severity NOTE; Done := TRUE; end if; wait for 1 us; end loop; -------------------------------------------------------------------- -- -- Fill up the block RAM with data to be written to memory. -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000100#; -- Block RAM for Mem dwordCount := 9; memData(0) := 16#00010000#; memData(1) := 16#00030002#; memData(2) := 16#00050004#; memData(3) := 16#00070006#; memData(4) := 16#00090008#; memData(5) := 16#000b000a#; memData(6) := 16#000d000c#; memData(7) := 16#000d000e#; memData(8) := 16#0000000e#; WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, memData ); -------------------------------------------------------------------- -- -- Write the memory access type and DWORD count -- to the second control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000001#; -- Second control register for Left Mem dwordCount := 1; regData(0) := 16#00000009#; -- Write_Sel_n : bit 20 = 0 -- DWORD count : bits 7 downto 0 = 256 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Write the block RAM buffer offset and memory address -- to the first control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- First control register for Mem dwordCount := 1; regData(0) := 16#00002000#; -- Offset : bits 31 downto 23 = 0x000 -- Address : bits 22 downto 0 = 0x000 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Trigger the memory write by writing to the third register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000003#; -- Third control register for Left Mem dwordCount := 1; regData(0) := 16#00000000#; -- Don't care WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Read the status of the memory write -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- Status register for Left Mem dwordCount := 1; Done := FALSE; while ( not Done ) loop WS_ReadPeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); if ( regData(0) mod 2 = 1 ) then assert FALSE report "PE1 Data write to 0x3000 has completed" severity NOTE; Done := TRUE; end if; wait for 1 us; end loop; -------------------------------------------------------------------- -- -- Fill up the block RAM with data to be written to memory. -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000100#; -- Block RAM for Mem dwordCount := 15; memData(0) := 16#e1a0c00d#; memData(1) := 16#e92dd800#; memData(2) := 16#e24cb004#; memData(3) := 16#e24dd00c#; memData(4) := 16#e3a03005#; memData(5) := 16#e50b3010#; memData(6) := 16#e3a03006#; memData(7) := 16#e50b3014#; memData(8) := 16#e51b3010#; memData(9) := 16#e51b2014#; memData(10) := 16#e0833002#; memData(11) := 16#e50b3018#; memData(12) := 16#e91ba800#; memData(13) := 16#ffffffff#; memData(14) := 16#00000000#; WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, memData ); -------------------------------------------------------------------- -- -- Write the memory access type and DWORD count -- to the second control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000001#; -- Second control register for Left Mem dwordCount := 1; regData(0) := 16#0000000f#; -- Write_Sel_n : bit 20 = 0 -- DWORD count : bits 7 downto 0 = 256 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Write the block RAM buffer offset and memory address -- to the first control register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000000#; -- First control register for Mem dwordCount := 1; regData(0) := 16#00018000#; -- Offset : bits 31 downto 23 = 0x000 -- Address : bits 22 downto 0 = 0x000 WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData ); -------------------------------------------------------------------- -- -- Trigger the memory write by writing to the third register -- -------------------------------------------------------------------- peNum := WS_PE1; dwordOffset := 16#00000003#; -- Third control register for Left Mem dwordCount := 1; regData(0) := 16#00000000#; -- Don't care WS_WritePeReg ( Cmd_Req, Cmd_Ack, board, peNum, dwordOffset, dwordCount, regData );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -