This commit is contained in:
2025-11-06 10:44:25 +08:00
parent 949396519e
commit 40ddda13c4
25 changed files with 66164 additions and 74 deletions

BIN
CourseDesignReport.docx Normal file

Binary file not shown.

View File

@@ -3,7 +3,7 @@
<!--The data in this file is primarily intended for consumption by Xilinx tools.
The structure and the elements are likely to change over the next few releases.
This means code written to parse this file will need to be revisited each subsequent release.-->
<application name="pa" timeStamp="Wed Jun 18 12:07:36 2025">
<application name="pa" timeStamp="Fri Jun 20 17:48:38 2025">
<section name="Project Information" visible="false">
<property name="ProjectID" value="bf8c3145fb1f463a9279744865a6650a" type="ProjectID"/>
<property name="ProjectIteration" value="1" type="ProjectIteration"/>
@@ -17,81 +17,93 @@ This means code written to parse this file will need to be revisited each subseq
<property name="ImplStrategy" value="Vivado Implementation Defaults" type="ImplStrategy"/>
</item>
<item name="Java Command Handlers">
<property name="AddSources" value="2" type="JavaHandler"/>
<property name="AddSources" value="4" type="JavaHandler"/>
<property name="EditDelete" value="1" type="JavaHandler"/>
<property name="NewProject" value="1" type="JavaHandler"/>
<property name="OpenProject" value="2" type="JavaHandler"/>
<property name="RunSchematic" value="6" type="JavaHandler"/>
<property name="SetTopNode" value="1" type="JavaHandler"/>
<property name="ShowSource" value="1" type="JavaHandler"/>
<property name="SimulationRun" value="7" type="JavaHandler"/>
<property name="RunSchematic" value="29" type="JavaHandler"/>
<property name="SetTopNode" value="3" type="JavaHandler"/>
<property name="ShowSource" value="4" type="JavaHandler"/>
<property name="SimulationRun" value="8" type="JavaHandler"/>
<property name="ToolsSettings" value="1" type="JavaHandler"/>
<property name="ViewTaskRTLAnalysis" value="2" type="JavaHandler"/>
<property name="ZoomFit" value="7" type="JavaHandler"/>
<property name="ZoomIn" value="13" type="JavaHandler"/>
<property name="ZoomOut" value="24" type="JavaHandler"/>
<property name="ViewTaskRTLAnalysis" value="3" type="JavaHandler"/>
<property name="ZoomFit" value="21" type="JavaHandler"/>
<property name="ZoomIn" value="16" type="JavaHandler"/>
<property name="ZoomOut" value="26" type="JavaHandler"/>
</item>
<item name="Gui Handlers">
<property name="AbstractCombinedPanel_REMOVE_SELECTED_ELEMENTS" value="1" type="GuiHandlerData"/>
<property name="AbstractFileView_RELOAD" value="2" type="GuiHandlerData"/>
<property name="AddSrcWizard_SPECIFY_SIMULATION_SPECIFIC_HDL_FILES" value="1" type="GuiHandlerData"/>
<property name="BaseDialog_CANCEL" value="4" type="GuiHandlerData"/>
<property name="BaseDialog_OK" value="16" type="GuiHandlerData"/>
<property name="BaseDialog_CANCEL" value="6" type="GuiHandlerData"/>
<property name="BaseDialog_OK" value="34" type="GuiHandlerData"/>
<property name="CmdMsgDialog_MESSAGES" value="1" type="GuiHandlerData"/>
<property name="CmdMsgDialog_OK" value="2" type="GuiHandlerData"/>
<property name="CmdMsgDialog_OK" value="5" type="GuiHandlerData"/>
<property name="ConfirmSaveTextEditsDialog_NO" value="1" type="GuiHandlerData"/>
<property name="CreateSrcFileDialog_FILE_NAME" value="10" type="GuiHandlerData"/>
<property name="DefaultOptionPane_CLOSE" value="1" type="GuiHandlerData"/>
<property name="FPGAChooser_FPGA_TABLE" value="1" type="GuiHandlerData"/>
<property name="FileSetPanel_FILE_SET_PANEL_TREE" value="17" type="GuiHandlerData"/>
<property name="FlowNavigatorTreePanel_FLOW_NAVIGATOR_TREE" value="16" type="GuiHandlerData"/>
<property name="FileSetPanel_FILE_SET_PANEL_TREE" value="48" type="GuiHandlerData"/>
<property name="FlowNavigatorTreePanel_FLOW_NAVIGATOR_TREE" value="28" type="GuiHandlerData"/>
<property name="GettingStartedView_CREATE_NEW_PROJECT" value="1" type="GuiHandlerData"/>
<property name="GettingStartedView_OPEN_PROJECT" value="2" type="GuiHandlerData"/>
<property name="GraphicalView_ZOOM_FIT" value="1" type="GuiHandlerData"/>
<property name="InstanceMenu_FLOORPLANNING" value="5" type="GuiHandlerData"/>
<property name="GraphicalView_ZOOM_FIT" value="3" type="GuiHandlerData"/>
<property name="InstanceMenu_FLOORPLANNING" value="27" type="GuiHandlerData"/>
<property name="MainMenuMgr_FLOORPLANNING" value="1" type="GuiHandlerData"/>
<property name="MainMenuMgr_IO_PLANNING" value="1" type="GuiHandlerData"/>
<property name="MainMenuMgr_REPORTS" value="2" type="GuiHandlerData"/>
<property name="MainMenuMgr_TOOLS" value="2" type="GuiHandlerData"/>
<property name="MainMenuMgr_WINDOW" value="4" type="GuiHandlerData"/>
<property name="MainWinMenuMgr_LAYOUT" value="2" type="GuiHandlerData"/>
<property name="NetlistSchMenuAndMouse_VIEW" value="5" type="GuiHandlerData"/>
<property name="NetlistSchMenuAndMouse_EXPAND_COLLAPSE" value="4" type="GuiHandlerData"/>
<property name="NetlistSchMenuAndMouse_VIEW" value="26" type="GuiHandlerData"/>
<property name="NetlistSchematicView_SHOW_CELLS_IN_THIS_SCHEMATIC" value="1" type="GuiHandlerData"/>
<property name="NetlistTreeView_NETLIST_TREE" value="14" type="GuiHandlerData"/>
<property name="PACommandNames_AUTO_UPDATE_HIER" value="5" type="GuiHandlerData"/>
<property name="NetlistTreeView_FLOORPLANNING" value="1" type="GuiHandlerData"/>
<property name="NetlistTreeView_NETLIST_TREE" value="64" type="GuiHandlerData"/>
<property name="PACommandNames_ADD_SOURCES" value="2" type="GuiHandlerData"/>
<property name="PACommandNames_AUTO_UPDATE_HIER" value="16" type="GuiHandlerData"/>
<property name="PACommandNames_EXPORT_SCHEMATIC" value="1" type="GuiHandlerData"/>
<property name="PACommandNames_SCHEMATIC" value="5" type="GuiHandlerData"/>
<property name="PACommandNames_SET_AS_TOP" value="4" type="GuiHandlerData"/>
<property name="PACommandNames_SIMULATION_RUN_BEHAVIORAL" value="7" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_FIT" value="7" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_IN" value="4" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_OUT" value="11" type="GuiHandlerData"/>
<property name="PACommandNames_SCHEMATIC" value="22" type="GuiHandlerData"/>
<property name="PACommandNames_SET_AS_TOP" value="6" type="GuiHandlerData"/>
<property name="PACommandNames_SIMULATION_RUN_BEHAVIORAL" value="8" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_FIT" value="21" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_IN" value="5" type="GuiHandlerData"/>
<property name="PACommandNames_ZOOM_OUT" value="13" type="GuiHandlerData"/>
<property name="PAViews_CODE" value="2" type="GuiHandlerData"/>
<property name="PAViews_SCHEMATIC" value="2" type="GuiHandlerData"/>
<property name="PrimitivesMenu_HIGHLIGHT_LEAF_CELLS" value="10" type="GuiHandlerData"/>
<property name="PAViews_SCHEMATIC" value="10" type="GuiHandlerData"/>
<property name="PrimitivesMenu_HIGHLIGHT_LEAF_CELLS" value="34" type="GuiHandlerData"/>
<property name="ProjectNameChooser_CREATE_PROJECT_SUBDIRECTORY" value="1" type="GuiHandlerData"/>
<property name="ProjectNameChooser_PROJECT_NAME" value="1" type="GuiHandlerData"/>
<property name="ProjectTab_RELOAD" value="4" type="GuiHandlerData"/>
<property name="RDICommands_CUSTOM_COMMANDS" value="1" type="GuiHandlerData"/>
<property name="RDICommands_DELETE" value="2" type="GuiHandlerData"/>
<property name="RDICommands_SETTINGS" value="1" type="GuiHandlerData"/>
<property name="SaveSchematicDialog_ORIENTATION" value="2" type="GuiHandlerData"/>
<property name="SchMenuAndMouse_SAVE_AS_PDF_FILE" value="2" type="GuiHandlerData"/>
<property name="SelectMenu_HIGHLIGHT" value="6" type="GuiHandlerData"/>
<property name="SelectMenu_MARK" value="5" type="GuiHandlerData"/>
<property name="RemoveSourcesDialog_ALSO_DELETE" value="1" type="GuiHandlerData"/>
<property name="SaveSchematicDialog_ORIENTATION" value="10" type="GuiHandlerData"/>
<property name="SaveSchematicDialog_SPECIFY_OUTPUT_PDF_FILE" value="16" type="GuiHandlerData"/>
<property name="SchMenuAndMouse_EXPAND_CONE" value="5" type="GuiHandlerData"/>
<property name="SchMenuAndMouse_SAVE_AS_PDF_FILE" value="19" type="GuiHandlerData"/>
<property name="SchOptionsView_ATTRIBUTES_TABLE" value="4" type="GuiHandlerData"/>
<property name="SchematicView_REMOVE" value="1" type="GuiHandlerData"/>
<property name="SelectMenu_HIGHLIGHT" value="30" type="GuiHandlerData"/>
<property name="SelectMenu_MARK" value="35" type="GuiHandlerData"/>
<property name="SettingsDialog_OPTIONS_TREE" value="1" type="GuiHandlerData"/>
<property name="SettingsEditorPage_CUSTOM_EDITOR" value="1" type="GuiHandlerData"/>
<property name="SettingsEditorPage_ENTER_COMMAND_LINE_FOR_CUSTOM" value="1" type="GuiHandlerData"/>
<property name="SimulationObjectsPanel_SIMULATION_OBJECTS_TREE_TABLE" value="2" type="GuiHandlerData"/>
<property name="SrcChooserPanel_ADD_HDL_AND_NETLIST_FILES_TO_YOUR_PROJECT" value="1" type="GuiHandlerData"/>
<property name="SrcChooserPanel_ADD_HDL_AND_NETLIST_FILES_TO_YOUR_PROJECT" value="3" type="GuiHandlerData"/>
<property name="SrcChooserPanel_CREATE_FILE" value="10" type="GuiHandlerData"/>
<property name="SrcChooserTable_SRC_CHOOSER_TABLE" value="3" type="GuiHandlerData"/>
<property name="SrcMenu_IP_HIERARCHY" value="3" type="GuiHandlerData"/>
<property name="SyntheticaGettingStartedView_RECENT_PROJECTS" value="1" type="GuiHandlerData"/>
<property name="SrcMenu_IP_HIERARCHY" value="15" type="GuiHandlerData"/>
<property name="SyntheticaGettingStartedView_RECENT_PROJECTS" value="4" type="GuiHandlerData"/>
<property name="TclConsoleView_COPY" value="2" type="GuiHandlerData"/>
<property name="TclConsoleView_TCL_CONSOLE_CODE_EDITOR" value="35" type="GuiHandlerData"/>
<property name="WaveformNameTree_WAVEFORM_NAME_TREE" value="4" type="GuiHandlerData"/>
</item>
<item name="Other">
<property name="GuiMode" value="7" type="GuiMode"/>
<property name="GuiMode" value="11" type="GuiMode"/>
<property name="BatchMode" value="0" type="BatchMode"/>
<property name="TclMode" value="4" type="TclMode"/>
<property name="TclMode" value="7" type="TclMode"/>
</item>
</section>
</application>

View File

@@ -2,8 +2,8 @@
# Webtalk v2018.1 (64-bit)
# SW Build 2188600 on Wed Apr 4 18:40:38 MDT 2018
# IP Build 2185939 on Wed Apr 4 20:55:05 MDT 2018
# Start of session at: Wed Jun 18 20:13:54 2025
# Process ID: 21412
# Start of session at: Fri Jun 20 18:50:01 2025
# Process ID: 32760
# Current directory: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim
# Command line: wbtcv.exe -mode batch -source D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim/xsim.dir/cpu_tb_snapshot/webtalk/xsim_webtalk.tcl -notrace
# Log file: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim/webtalk.log

View File

@@ -2,8 +2,8 @@
# Webtalk v2018.1 (64-bit)
# SW Build 2188600 on Wed Apr 4 18:40:38 MDT 2018
# IP Build 2185939 on Wed Apr 4 20:55:05 MDT 2018
# Start of session at: Wed Jun 18 20:13:51 2025
# Process ID: 30320
# Start of session at: Fri Jun 20 18:49:58 2025
# Process ID: 28472
# Current directory: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim
# Command line: wbtcv.exe -mode batch -source D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim/xsim.dir/cpu_tb_snapshot/webtalk/xsim_webtalk.tcl -notrace
# Log file: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim/webtalk.log

View File

@@ -2,8 +2,8 @@
# xsim v2018.1 (64-bit)
# SW Build 2188600 on Wed Apr 4 18:40:38 MDT 2018
# IP Build 2185939 on Wed Apr 4 20:55:05 MDT 2018
# Start of session at: Wed Jun 18 20:13:51 2025
# Process ID: 20256
# Start of session at: Fri Jun 20 18:49:58 2025
# Process ID: 27168
# Current directory: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim
# Command line: xsim.exe -log ..\..\..\..\..\simulation.log -mode tcl -source {xsim.dir/cpu_tb_snapshot/xsim_script.tcl}
# Log file: D:/Schoolwork/ComputerComposition/LA32R/Hardware/LA32R.sim/sim_1/behav/xsim/../../../../../simulation.log

View File

@@ -31,8 +31,6 @@
** - "program.hex" 的路径在 `instruction_memory.v` 模块中指定
*******************************************************************************/
`timescale 1ns / 1ps
module cpu_tb;
// --- 信号声明 ---
@@ -66,7 +64,7 @@ module cpu_tb;
// 2. 设定仿真运行时间后停止
// 由于测试程序末尾通常是无限循环因此需要手动设置仿真停止时间
#500; // 仿真运行500纳秒
#5000; // 仿真运行5000纳秒
// 3. 仿真结束前打印寄存器堆的最终状态
$display("\n------------------------------------------------------------");
@@ -89,13 +87,10 @@ module cpu_tb;
// 在每个时钟周期的下降沿采样并显示信息以确保在该时刻所有待显示的信号值均已稳定
always @(negedge clk) begin
if (!rst) begin //仅在非复位状态下显示
$display("时间: %0t ns | PC: 0x%08h | 指令: 0x%08h | R4=0x%h R5=0x%h R6=0x%h",
$display("时间: %0t ns | PC: 0x%08h | 指令: 0x%08h",
$time, // 当前仿真时间
uut.pc_out, // PC的当前值
uut.instr, // 当前PC指向的指令
uut.u_reg_file.registers[4], // R4寄存器的值
uut.u_reg_file.registers[5], // R5寄存器的值
uut.u_reg_file.registers[6] // R6寄存器的值
uut.instr // 当前PC指向的指令
);
end
end

View File

@@ -31,7 +31,7 @@
<Option Name="EnableBDX" Val="FALSE"/>
<Option Name="DSAVendor" Val="xilinx"/>
<Option Name="DSANumComputeUnits" Val="60"/>
<Option Name="WTXSimLaunchSim" Val="6"/>
<Option Name="WTXSimLaunchSim" Val="7"/>
<Option Name="WTModelSimLaunchSim" Val="0"/>
<Option Name="WTQuestaLaunchSim" Val="0"/>
<Option Name="WTIesLaunchSim" Val="0"/>

Binary file not shown.

View File

View File

BIN
Report/Report.docx Normal file

Binary file not shown.

3772
Schematic/alu.pdf Normal file

File diff suppressed because one or more lines are too long

5711
Schematic/control_unit.pdf Normal file

File diff suppressed because one or more lines are too long

4669
Schematic/cpu_top.pdf Normal file

File diff suppressed because one or more lines are too long

BIN
Schematic/data_memory.pdf Normal file

Binary file not shown.

1355
Schematic/imm_extender.pdf Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2084
Schematic/pc.pdf Normal file

File diff suppressed because one or more lines are too long

22280
Schematic/register_file.pdf Normal file

File diff suppressed because one or more lines are too long

View File

@@ -143,7 +143,7 @@ def main():
# 实际应用中,可以修改为接收命令行参数来指定输入输出文件
# 例如: python assembler.py input.asm output.hex
try:
with open("../program.asm", "r", encoding="utf-8") as asm_file:
with open("../sortnum.asm", "r", encoding="utf-8") as asm_file:
assembly_code = asm_file.read()
except FileNotFoundError:
print("错误:汇编文件 '../program.asm' 未找到。请确保文件路径正确。")

View File

@@ -1,21 +1,55 @@
14246004
02915884
15110005
02bffca5
00101486
00111487
00121488
00129489
0014948a
0015148b
00142d4c
02819001
29800024
29801025
2880002d
2880102e
580009a4
0280040f
600008e6
02800410
53ffffff
02816021
0280b042
02800463
02805884
0280dca5
0012082a
58001140
0280002b
02800041
02800162
00120c2a
58001140
0280002b
02800061
02800163
0012102a
58001140
0280002b
02800081
02800164
0012142a
58001140
0280002b
028000a1
02800165
00120c4a
58001140
0280004b
02800062
02800163
0012104a
58001140
0280004b
02800082
02800164
0012144a
58001140
0280004b
028000a2
02800165
0012106a
58001140
0280006b
02800083
02800164
0012146a
58001140
0280006b
028000a3
02800165
0012148a
58001140
0280008b
028000a4
02800165

17
numadd.asm Normal file
View File

@@ -0,0 +1,17 @@
// Add from 1 to 50
// R1 stores the result
// R2 is a counter
// By default, R1, R2 is 0
// If R2 is 50, the program ends
// If R2 is not 50, the program adds R2 to R1 and increments R2 by 1
lu12i.w $r1, 0x00000 // r1 = 0x00000000 (result)
lu12i.w $r2, 0x00000 // r2 = 0x00000000 (counter)
lu12i.w $r3, 0x00000
addi.w $r3, $r3, 0x032 // r3 = 0x00000032 (50 in decimal)
addi.w $r2, $r2, 1 // r2 = r2 + 1 (increment counter)
add.w $r1, $r1, $r2 // r1 = r1 + r2 (add counter to result)
beq $r3, $r2, 12 // If r2 = 50, branch to 'end' label
b -12 // Jump back to the beginning of the loop
// 'end:' label is here
b -4 // Infinite loop: jump to itself

5
program.hex Normal file
View File

@@ -0,0 +1,5 @@
14000001
14000002
14000643
60000c43
02800442

69
sortnum.asm Normal file
View File

@@ -0,0 +1,69 @@
// Sort number from biggest to smallest
// 88 66 44 22 1 11 33 55 77 99
addi.w $r1, $r1, 88
addi.w $r2, $r2, 44
addi.w $r3, $r3, 1
addi.w $r4, $r4, 22
addi.w $r5, $r5, 55
slt $r10, $r1, $r2 // Compare r1 and r2
beq $r10, $r0, 16 // If r1 >= r2, branch to next
addi.w $r11, $r1, 0 // r11 = r1 (temp storage)
addi.w $r1, $r2, 0 // r1 = r2 (swap)
addi.w $r2, $r11, 0 // r2 = r11 (swap)
slt $r10, $r1, $r3 // Compare r1 and r3
beq $r10, $r0, 16 // If r1 >= r3, branch to next
addi.w $r11, $r1, 0 // r11 = r1 (temp storage)
addi.w $r1, $r3, 0 // r1 = r3 (swap)
addi.w $r3, $r11, 0 // r3 = r11 (swap)
slt $r10, $r1, $r4 // Compare r1 and r4
beq $r10, $r0, 16 // If r1 >= r4, branch to next
addi.w $r11, $r1, 0 // r11 = r1 (temp storage)
addi.w $r1, $r4, 0 // r1 = r4 (swap)
addi.w $r4, $r11, 0 // r4 = r11 (swap)
slt $r10, $r1, $r5 // Compare r1 and r5
beq $r10, $r0, 16 // If r1 >= r5, branch to next
addi.w $r11, $r1, 0 // r11 = r1 (temp storage)
addi.w $r1, $r5, 0 // r1 = r5 (swap)
addi.w $r5, $r11, 0 // r5 = r11 (swap)
slt $r10, $r2, $r3 // Compare r2 and r3
beq $r10, $r0, 16 // If r2 >= r3, branch to next
addi.w $r11, $r2, 0 // r11 = r2 (temp storage)
addi.w $r2, $r3, 0 // r2 = r3 (swap)
addi.w $r3, $r11, 0 // r3 = r11 (swap)
slt $r10, $r2, $r4 // Compare r2 and r4
beq $r10, $r0, 16 // If r2 >= r4, branch to next
addi.w $r11, $r2, 0 // r11 = r2 (temp storage)
addi.w $r2, $r4, 0 // r2 = r4 (swap)
addi.w $r4, $r11, 0 // r4 = r11 (swap)
slt $r10, $r2, $r5 // Compare r2 and r5
beq $r10, $r0, 16 // If r2 >= r5, branch to next
addi.w $r11, $r2, 0 // r11 = r2 (temp storage)
addi.w $r2, $r5, 0 // r2 = r5 (swap)
addi.w $r5, $r11, 0 // r5 = r11 (swap)
slt $r10, $r3, $r4 // Compare r3 and r4
beq $r10, $r0, 16 // If r3 >= r4, branch to next
addi.w $r11, $r3, 0 // r11 = r3 (temp storage)
addi.w $r3, $r4, 0 // r3 = r4 (swap)
addi.w $r4, $r11, 0 // r4 = r11 (swap)
slt $r10, $r3, $r5 // Compare r3 and r5
beq $r10, $r0, 16 // If r3 >= r5, branch to next
addi.w $r11, $r3, 0 // r11 = r3 (temp storage)
addi.w $r3, $r5, 0 // r3 = r5 (swap)
addi.w $r5, $r11, 0 // r5 = r11 (swap)
slt $r10, $r4, $r5 // Compare r4 and r5
beq $r10, $r0, 16 // If r4 >= r5, branch to next
addi.w $r11, $r4, 0 // r11 = r4 (temp storage)
addi.w $r4, $r5, 0 // r4 = r5 (swap)
addi.w $r5, $r11, 0 // r5 = r11 (swap)