實驗-設計一個應用系統(計算機組成原理)

目錄

一. 實驗內容

二. 實驗步驟

(1)七段數碼管顯示模塊

(2)指令模塊

(3)控制模塊

(4)ALU模塊

(5)CPU模塊

三. 實現效果

四. 實驗環境

五. 實驗小結及思考

一. 實驗內容

設計一個簡易的計算器:

????????在上一個實驗當中,你已經成功設計好了一個cpu,在該cpu基礎之上,請你利用軟硬件協同設計思想,在此基礎之上設計一個簡單的整數“加,減,乘,除”計算器,對于計算器計算的結果,你需要用七段數碼管進行展示。

二. 實驗步驟

(1)七段數碼管顯示模塊

????????在這個簡易計算器中,我們最終需要將結果顯示七段數碼管上面。在這里我們首先需要設計一個譯碼器,使得輸入0~9可以顯示在七段數碼管上面。

????????利用一個真值表,輸入一個4bit的數,可以表達0~9,并且成功點亮七段數碼管8個LED燈的相應LED燈。真值表如下:

????????(10~15不顯示結果)

????????利用如上的真值表,就可以設計出以下電路:

????????來實現輸入對應的0~9可以在數碼管上面顯示出來。

????????由于輸出的結果是16進制的數,且是32bit的,需要轉化為兩個十進制的數來顯示。可以將得到的結果利用分隔線這個運算器來實現除A(10)的操作,把商的低4位給第一個數碼管(十位)。把余數的低4位給第二個數碼管(個位)。電路連接如下:

(2)指令模塊

????????我們需要重新寫一段代碼,翻譯成機器碼,存儲到ROM中。

????????以上是在venus仿真器中編寫的代碼。實現每次從內存中取兩個數據,分別進行加減乘除運算后,再把結果寫回到內存中的運算。我們將以上代碼翻譯為機器碼后,再復制到CPU的ROM中。

(3)控制模塊

????????因為在實驗二中,并沒有用到sub和div這兩條指令。所以在這個模塊中,我們需要添加這兩條指令。查詢RISC-V指令集手冊,可以補全實現二的表格。如下:

????????然后需要在control模塊中添加這兩條模塊的識別電路,通過opcode、fun3、fun7來共同實現。再添加一個復用器,選擇位設定為2,來控制當識別為sub或div指令的時候,選擇ROM中的第8和第9條機器碼來識別一些控制信號。電路如下:

(4)ALU模塊

????????在ALU模塊中,原本沒有除法運算,所以需要添加除法運算的電路模塊。在實驗二里,AULSel的0011是未使用的,在這里就可以用于除法的使用。利用一個分隔器來實現除法運算,電路如下:

(5)CPU模塊

????????由于將四則運算的結果分別存到t4、t5、t6、s0寄存器里,所以在在CPU中,只需要將對應寄存器的值傳輸給譯碼器后,再連接七段數碼管即可。電路如下:

三. 實現效果

????????將機器碼加載到ROM中,將數據加載到RAM中,開始運行,即可得到如下效果:

????????在RAM中:

????????數碼管顯示:

????????此結果與venus仿真器中的結果一致:

四. 實驗環境

????????使用Logisim完成RISC-V處理器的設計和調試。

????????使用Venus仿真器完成測試程序的運行和調試、內存轉儲(memory dump)。

五. 實驗小結及思考

1.了解了ALUSel是什么。

????????ALUSel信號用于ALU中,選擇對應的運算。它的值需要根據我們具體設置的ALU來設定。

2.在匯編語言中懂得了.word?和?.space?是兩種常用的偽指令(pseudo-instruction),它們用于在數據段中定義和初始化數據。

????????.word?用于在內存中定義一個或多個32位(或根據目標處理器架構可能是其他位寬)的整數。

????????這些整數可以是立即數(即直接給出的數值),也可以是標簽(代表另一個內存位置的值,但這在?.word?中不常見,通常用于其他類型的指令或偽指令中)。

????????.space?用于在內存中分配一定大小的空間,但不初始化這些空間(即這些空間的內容是未定義的,可能是隨機的或零,取決于系統的內存管理)。.space?通常需要一個參數,指定要分配的空間大小(以字節為單位)。

3.學會了如何讀入外設,以及如何把數據輸出到外設中。

????????可以通過設置使能端和其他控制信號將外設數據輸入寄存器文件中和把數據輸出到外設中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81960.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81960.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81960.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【博客系統】博客系統第四彈:令牌技術

令牌機制 為什么不能使用 Session 實現登錄功能? 傳統思路: 登錄頁面把用戶名密碼提交給服務器。服務器端驗證用戶名密碼是否正確,并返回校驗結果給前端。如果密碼正確,則在服務器端創建 Session。通過 Cookie 把 sessionId 返回…

【瑞數3代】藥監評審中心逆向分析 | 后綴MmEwMD參數

1.目標 目標網址:https://www.cde.org.cn/main/news/listpage/545cf855a50574699b46b26bcb165f32 import requestscookies {FSSBBIl1UgzbN7N80S: 8sYeMWaC_IHoNl8Ckfx2y9MLiueMCkPr2V3MIoZkrMPUfzMMaXKzAoxpNPvyw4lt,Path: /,FSSBBIl1UgzbN7N80T: 3js3ygV.St6BvO20…

【漫話機器學習系列】274.基尼指數(Gini Index)

決策樹中的基尼指數(Gini Index)詳解 —— 從公式理解到實際應用 在構建決策樹模型時,一個核心問題是:如何選擇最優的特征來進行節點劃分? 這就涉及到了“劃分準則”的問題。常見的準則有信息增益、信息增益率以及本文…

R語言學習--Day07--T分布與T檢驗

昨天我們介紹了R中用于對數據進行分類的聚類分析的方法,接下來我們來看T分布。 T分布 T分布適用于幫我們估計整組數據(較小的數據量,一般小于30)的真實值在哪一個區間,具體是計算置信區間(一般為95%&#…

數據結構與算法-線性表-雙向鏈表(Double Linked List)

1 線性表 1.4 雙向鏈表(Double Linked List) 雙向鏈表的結點中有兩個指針域,一個指向直接后繼,另一個指向直接前驅,主要是為了解決前向查找的問題。 雙向鏈表結構: 書籍和視頻教程都只講解了插入和刪除的…

甘特圖實例 dhtmlxGantt.js

本文介紹了如何使用dhtmlxGantt庫創建一個基礎的甘特圖示例,并對其進行漢化和自定義配置。首先,通過引入dhtmlxgantt.css和dhtmlxgantt.js文件初始化甘特圖。接著,通過設置gantt.i18n.setLocale("cn")實現核心文本的漢化&#xff0…

C++23 新增扁平化關聯容器詳解

文章目錄 一、引言已有關聯容器回顧新容器的引入原因 二、std::flat_set定義與特性代碼示例適用場景 三、std::flat_multiset定義與特性代碼示例適用場景 四、std::flat_map定義與特性代碼示例適用場景 五、std::flat_multimap定義與特性代碼示例適用場景 六、與其他容器的比較…

使用zap,對web應用/API接口 做安全檢測

https://www.zaproxy.org/getting-started/ 檢測方法 docker pull ghcr.io/zaproxy/zaproxy:stable# 執行baseline測試 docker run -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \ -t https://baseline.yeshen.org# 執行api測試 docker run -t ghcr.io/zaproxy/zaproxy…

Qt—模態與非模態對話框

Qt—模態與非模態對話框 核心概念 ?模態對話框??:強制用戶優先處理當前窗口,阻塞指定范圍的用戶交互。?非模態對話框??:允許用戶自由切換窗口,無交互限制。 一、模態對話框類型與行為 1. 應用級模態(Applica…

Axure高保真CRM客戶關系管理系統原型

一套出色的CRM(客戶關系管理)系統,無疑是企業管理者掌控客戶動態、提升銷售業績的得力助手。今天,就為大家介紹一款精心打造的Axure高保真CRM客戶關系管理系統原型模板,助你輕松開啟高效客戶管理之旅。 這款CRM原型模…

【羊圈——狀壓 + DP / 記憶化搜索DP】

題目 一般DP代碼&#xff08;注意&#xff0c;這里只能向外推(起始狀態是f(1,0)&#xff0c;不能向內推&#xff08;不然會導致之前的羊圈被割裂&#xff09;&#xff09; #include <bits/stdc.h> using namespace std;const int MAX_N 210; const int MAX_M 16;int n…

講解Mysql InnoDB的MVCC

1. 定義 MVCC是多版本并發控制&#xff08;Multi - Version Concurrency Control&#xff09;的縮寫。它是InnoDB存儲引擎實現高并發控制的一種機制。在數據庫系統中&#xff0c;多個事務可能會同時對數據進行讀寫操作&#xff0c;而MVCC通過為數據行保存多個版本來解決并發事務…

ZeroMQ Sockets介紹及應用示例

1. 概念解釋 ZeroMQ Sockets提供了一種類標準套接字&#xff08;socket-like&#xff09;的 API&#xff0c;是消息導向的通信機制&#xff0c;基于 TCP/UDP 等傳輸層協議&#xff0c;但封裝了底層細節&#xff08;如連接管理、消息路由、緩沖區等&#xff09;&#xff0c;提供…

語音合成之十五 語音合成(TTS)分句生成拼接時的響度一致性問題:現狀、成因與對策

語音合成&#xff08;TTS&#xff09;分句生成拼接時的響度一致性問題&#xff1a;現狀、成因與對策 引言&#xff1a;分段式文本轉語音中的響度一致性挑戰業界對響度差異問題的認知拼接語音片段中響度變化的根本原因分段拼接的固有挑戰各片段預測韻律特征的差異文本特征和模型…

Android中Binder驅動作用?

Binder驅動的作用與核心功能 Binder驅動是Android系統中實現進程間通信&#xff08;IPC&#xff09;的核心底層組件&#xff0c;它工作于Linux內核層&#xff0c;負責管理跨進程通信的建立、數據傳輸、資源同步等關鍵任務。以下是其核心作用及實現細節&#xff1a; 1. ??進程…

網絡學習-TCP協議(七)

一、TCP協議 TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。 1、三次握手 客戶端&#xff1a; 1、先發起連接&#xff0c;發送SYN置1&#xff0c;seqnum12345(隨機值)----半連接…

【Python 基礎與實戰】從基礎語法到項目應用的全流程解析

&#xff08;1&#xff09;列表和元組的區別是什么?如何從列表創建元組?如何從元組創建列表? 列表和元組的區別&#xff1a; 可變性&#xff1a;列表是可變的&#xff0c;即可以對列表進行元素的增、刪、改操作。例如&#xff0c;可以使用append()方法添加元素&#xff0c;r…

Docker部署Zookeeper集群

簡介 ZooKeeper 是一個開源的分布式協調服務&#xff0c;由 Apache 軟件基金會開發和維護。它主要用于管理和協調分布式系統中的多個節點&#xff0c;以解決分布式環境下的常見問題&#xff0c;如配置管理、服務發現、分布式鎖等。ZooKeeper 提供了一種可靠的機制&#xff0c;…

【學習筆記】Sophus (Python) 使用文檔

以下是一份針對 Sophus 庫的 Python 使用文檔&#xff0c;涵蓋基礎概念、安裝方法、核心功能及代碼示例。內容圍繞 SO3&#xff08;3D旋轉群&#xff09;和 SE3&#xff08;3D剛體變換群&#xff09;展開&#xff0c;適合機器人學、SLAM、三維幾何等領域。 Sophus (Python) 使用…

計算機圖形學:(三)MVP變換擴展

Three.js WebGL允許把JavaScript和OpenGL 結合在一起運用&#xff0c;但使用WebGL原生的API來寫3D程序非常的復雜&#xff0c;同時需要相對較多的數學知識&#xff0c;對于前端開發者來說學習成本非常高。 Three.js是基于webGL的封裝的一個易于使用且輕量級的3D庫&#xff0c;T…