Files
LA32R/Reference/课程设计指导书.md
2025-06-17 00:35:40 +08:00

42 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 计算机组成原理 LoongArch之LA32R版课程设计指导书
## 五、课程设计任务
设计并实现LA32R架构的模型机硬件系统。要求在EDA工具Vivado仿真环境下完成电路的建模设计、仿真调试与运行。该模型机的指令系统包括以下14条指令指令的格式如表2所示指令的功能如表3所示。
<center>表2 指令格式说明</center>
<table><thead><tr><th rowspan="2"> 序号 </th><th rowspan="2">类型</th><th rowspan="2">指令</th><th>6位</th><th>1位</th><th>3位</th><th colspan="2">7位</th><th>5位</th><th>5位</th><th>5位</th></tr>
<tr><th>31 …26</th><th>25</th><th>24… 22</th><th>21 20</th><th>19…15</th><th>14…10</th><th>9… 5</th><th>4… 0</th></tr></thead><tbody><tr><td>1</td><td>1RI20</td><td>LUI12I.W</td><td>000101</td><td>0</td><td colspan="5">si20</td><td>rd</td></tr>
<tr><td>2</td><td>3R</td><td>ADD.W</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>00000</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>3</td><td>3R</td><td>SUB.W</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>00010</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>4</td><td>3R</td><td>SLT</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>00100</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>5</td><td>3R</td><td>SLTU</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>00101</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>6</td><td>3R</td><td>NOR</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>01000</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>7</td><td>3R</td><td>AND</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>01001</td><td>rk</td><td>rj</td><td>rd</td></tr>
<tr><td>8</td><td>3R</td><td>OR</td><td>000000</td><td colspan="2">0000</td><td>01</td><td>01010</td><td>rk</td><td>rj</td><td>rd</td></tr><tr><td>9</td><td>2RI12</td><td>ADDI.W</td><td>000000</td><td colspan="2">1010</td><td colspan="3">si12</td><td>rj</td><td>rd</td></tr>
<tr><td>10</td><td>2RI12</td><td>LD. W</td><td>001010</td><td colspan="2">0010</td><td colspan="3">si12</td><td>rj</td><td>rd</td></tr><tr><td>11</td><td>2RI12</td><td>ST.W</td><td>001010</td><td colspan="2">0110</td><td colspan="3">si12</td><td>rj</td><td>rd</td></tr>
<tr><td>12</td><td>I26</td><td>B</td><td>010100</td><td colspan="5">offs[15:0]</td><td colspan="2">offs [25:16]</td></tr><tr><td>13</td><td>2RI16</td><td>BEQ</td><td>010110</td><td colspan="5">offs[15:0]</td><td>rj</td><td>rd</td></tr>
<tr><td>14</td><td>2RI16</td><td>BLT</td><td>011000</td><td colspan="5">offs [15:0]</td><td>rj</td><td>rd</td></tr></tbody></table>
<center>表3 指令功能说明</center>
<table><thead><tr><th>序号</th><th>类型</th><th>指令</th><th>功能</th><th>说明</th></tr></thead><tbody><tr><td>1</td><td>1RI20</td><td>LU12I.W rd,si20</td><td>GR[rd] ⟵si20 || 12b0</td><td>①GR[rd]的高20位为si20低12位为0<br>②符号||表示拼接</td></tr><tr><td>2</td><td>3R</td><td>ADD.W rd, rj, rk</td><td>GR[rd]⟵GR[rj]+GR[rk]</td><td>加法</td></tr><tr><td>3</td><td>3R</td><td>SUB.W rd, rj, rk</td><td>GR[rd]⟵GR[rj]-GR[rk]</td><td>减法</td></tr><tr><td>4</td><td>3R</td><td>SLT rd, rj, rk</td><td>if (GR[rj]&lt;GR[rk]) GR[rd]⟵1 else GR[rd]⟵0</td><td>带符号数的大小比较</td></tr><tr><td>5</td><td>3R</td><td>SLTU rd, rj, rk</td><td>if (GR[rj]&lt;GR[rk]) GR[rd]⟵1 else GR[rd]⟵0</td><td>无符号数的大小比较</td></tr><tr><td>6</td><td>3R</td><td>NOR rd, rj, rk</td><td>GR[rd]⟵(GR[rj]GR[rk]) ̅</td><td>或非</td></tr><tr><td>7</td><td>3R</td><td>AND rd, rj, rk</td><td>GR[rd]⟵GR[rj] ∧ GR[rk]</td><td>与</td></tr><tr><td>8</td><td>3R</td><td>OR rd, rj, rk</td><td>GR[rd]⟵GR[rj] GR[rk]</td><td>或</td></tr>
<tr><td>9</td><td>2RI12</td><td>ADDI.W rd, rj, si12</td><td>GR[rd]⟵GR[rj]+ SignExtend(si12)</td><td>①立即数加法<br>②si12是12位立即数进行符号位扩展后与GR[rj]相加</td></tr><tr><td>10</td><td>2RI12</td><td>LD.W rd ,rj,si12</td><td>Addr⟵GR[rj] + SignExtend (si12) ,GR[rd] ⟵M[Addr]</td><td>①将内存Addr单元的值取出后存入R[rd]<br>②si12是12位立即数进行符号位扩展后与GR[rj]相加后得到内存单元的地址Addr</td></tr><tr><td>11</td><td>2RI12</td><td>ST.W rd, rj, si12</td><td>Addr⟵GR[rj] + SignExtend (si12) , M[Addr]⟵GR[rd]</td><td>①把GR[rd]的值存入内存Addr单元<br>②内存单元的地址Addr的计算方法与LD.W指令相同</td></tr><tr><td>12</td><td>I26</td><td>B offs26</td><td>PC⟵PC+ SignExtend (offs26||2b0)</td><td>无条件跳转到目标地址</td></tr><tr><td>13</td><td>2RI16</td><td>BEQ rj, rd, offs16</td><td>if (GR[rj]=GR[rd])<br>PC⟵PC+ SignExtend (offs16||2b0)</td><td>①符号||表示拼接<br>②GR[rj]=GR[rd]时,跳转到目标地址</td></tr>
<tr><td>14</td><td>2RI16</td><td>BLT rj, rd, offs16</td><td>if (signed(GR[rj])&lt;signed(GR[rd]))<br>PC⟵PC+ SignExtend (offs16||2b0)</td><td>①符号||表示拼接<br>②GR[rj]与GR[rd]视作带符号数<br>③GR[rj]&lt;GR[rd]时,跳转到目标地址</td></tr></tbody></table>
参考逻辑电路图如下。设计方案没有唯一答案,下图所示电路仅供参考。
![LA32R参考逻辑电路图](./支持5种类型共计14条指令的单周期LA32R%20CPU逻辑电路图.png)
<center>图1 支持5种类型共计14条指令的单周期LA32R CPU逻辑电路图</center>
## 六、课程设计步骤
1. 对指令格式和功能进行分析,绘制不同类型指令的数据通路;
2. 分析各类型指令执行阶段控制信号,绘制控制信号取值分析表;
3. 设计总框图,进行各逻辑部件之间的互相连接,完成模型机顶层模块的设计,使得由指令系统所要求的数据通路都能实现;
4. 编写机器语言应用程序(测试程序),存入模型机指令存储器;
5. 编写模型机顶层模块的仿真激励文件;
6. 运行仿真,分析仿真结果,撰写设计报告。