# 计算机组成原理 （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 || 12’b0</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||2’b0)</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||2’b0)</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||2’b0)</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. 运行仿真，分析仿真结果，撰写设计报告。
