计算机组成原理实验——一、ALU实验

news2024/9/24 17:12:26

一、实验目的

1.掌握ALU模块的组成和接口,理解ALU的功 能。
2.通过编程调用ALU模块计算斐波那契数。
3.掌握Verilog中多模块编程方法和实现。

二、实验内容

用 Verilog 设计一个算术运算单元 ALU,采 用纯组合逻辑设计,32bit 宽。

  • 利用该 ALU 完成斐波那契数 f(n),其中 2<n<16。
  • 可选
    –改成3段式实现(已实现)
    –用七段数码管输出(已实现)

三、实验程序

alu.v(加法器)

module alu(
    input [31:0] a,
    input [31:0] b,
    input [3:0] op,
    output reg[31:0] f,
    output c
    );
    always @(*)
    case(op)
        4'b0000: f = 32'b0;
        4'b0001: f = a + b;
        4'b0010: f = a - b;
        4'b0011: f = a & b;
        4'b0100: f = a | b;
        4'b0101: f = a ^ b;
        default: f = 32'b0;
    endcase
    assign c = ~(|f);
endmodule

fib.v(三段式斐波那契数列)

module fib(
    input clk,
    input rst,
    input [3:0] n,
    output [31:0] result
    );
    reg[31:0] ra, rb;
    wire[31:0] wf;
    reg[3:0] count;
    alu myalu(.a(ra),.b(rb),.op(4'b0001),.f(wf));
    reg[1:0] cur_state, nex_state;    // 现态和次态
    // 状态转移
    always @(posedge clk)
    begin
        if(rst==1)
            cur_state<=2'b00;  
        else
            cur_state<=nex_state;
    end
    // 状态转移条件   
    always @(*)
    begin
        case(cur_state)
            2'b00:
                nex_state<=2'b01;
            2'b01:
                nex_state<=2'b01;
            endcase
    end
    // 状态输出      
    always @(posedge clk)
    begin
        case(cur_state)
            2'b00:
            begin
                ra<=32'b1;
                rb<=32'b1;
                count<=4'b0011;
            end
            2'b01:
            if(count<n)
            begin
                ra<=rb;
                rb<=wf;            
                count<=count+1'b1; 
            end
        endcase
    end
    assign result=wf;     
endmodule

div.v(分频器)

module div(
    input clk,
    output clk_new
    );
    reg[17:0] q = 18'b0;
    always @(posedge clk)
    begin
        q=q+1'b1;
    end
    assign clk_new=q[17];
endmodule

seven.v(七段数码管)

module seven(
    input [3:0] data,
    output reg[6:0] out
    );
  always @(*)
  case (data)
      4'b0000:out = 7'b1111110; // 7e
      4'b0001:out = 7'b0110000; // 30
      4'b0010:out = 7'b1101101; // 6d
      4'b0011:out = 7'b1111001; // 79
      4'b0100:out = 7'b0110011; // 33
      4'b0101:out = 7'b1011011; // 5b
      4'b0110:out = 7'b1011111; // 5f
      4'b0111:out = 7'b1110000; // 70
      4'b1000:out = 7'b1111111; // 7f
      4'b1001:out = 7'b1111011; // 7b
      4'b1010:out = 7'b1110111; // 77
      4'b1011:out = 7'b0011111; // 1f
      4'b1100:out = 7'b1001110; // 4e
      4'b1101:out = 7'b0111101; // 3d
      4'b1110:out = 7'b1001111; // 4f
      4'b1111:out = 7'b1000111; // 47
      default:out = 7'b1111110; //7e
  endcase 
endmodule

show.v(七段数码管显示)

module show(
    input clk,
    input rst,
    input [11:0] result,
    output reg[2:0] an,
    output [6:0] out
    );
    wire clk_new;
    div mydiv(.clk(clk),.clk_new(clk_new));
    reg[3:0] data;
    reg[1:0] cur_state,nex_state;
    // 状态转移
//    always @(posedge clk)
    always @(posedge clk_new)
    begin
    if (rst)
        cur_state<=2'b00;
    else
        cur_state<=nex_state;
    end
    // 状态转移条件
    always @(*)
    begin
        case(cur_state)
            2'b00:
                nex_state<=2'b01;
            2'b01:
                nex_state<=2'b10;
            2'b10:
                nex_state<=2'b00;
        endcase
    end
    // 状态输出
//    always @(posedge clk)
    always @(posedge clk_new)
    begin
        case(cur_state)
            2'b00:
            begin
                an<=3'b01;
                data<=result[3:0];
            end
            2'b01:
            begin
                an<=3'b010;
                data<=result[7:4];
            end
            2'b10:
            begin
                an<=3'b100;
                data<=result[11:8];
            end
        endcase
    end
    seven myseven(.data(data),.out(out));         
endmodule

top.v(不用数码管显示)

module top(
    input clk,
    input rst,
    input [3:0] n,
    output [11:0] result
    );
    wire[31:0] temp;
    fib myfib(.clk(clk),.rst(rst),.n(n),.result(temp));
    assign result=temp[11:0];
endmodule

top.v(用数码管显示)

module top(
    input clk,
    input rst,
    input [3:0] n,
    output [2:0] an,
    output [6:0] out
    );
    wire[31:0] temp;
    fib myfib(.clk(clk),.rst(rst),.n(n),.result(temp));
    show myshow(.clk(clk),.rst(rst),.result(temp[11:0]),.an(an),.out(out)); 
endmodule

四、仿真程序

mysim.v(不用数码管显示)

module mysim(

    );
    reg clk=1'b0;
    reg rst=1'b1;
    reg[3:0] n=4'b1110;
    wire [11:0] result;
    always
        #10 clk=~clk;
    initial
        #11 rst=1'b0;
    top mytop(.clk(clk),.rst(rst),.n(n),.result(result));
endmodule

mysim.v(用数码管显示)

module mysim(

    );
    reg clk=1'b0;
    reg rst=1'b1;
    reg[3:0] n=4'b1110;
    wire[2:0] an;
    wire[6:0] out;
    always
        #10 clk=~clk;
    initial
        #11 rst=1'b0;
    top mytop(.clk(clk),.rst(rst),.n(n),.an(an),.out(out)); 
endmodule

五、仿真结果

不用数码管显示:
请添加图片描述
用数码管显示:
请添加图片描述

六、实验结果

用数码管显示请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022(终)最后一篇博客—继承和多态

目录 文章目录 一、继承 1.1为什么要继承 1.2继承概念 1.3继承的语法 1.4成员访问 1.5方法访问 1.6初始化代码块 1.7继承方式 二、多态 1.1多态的概念 1.2多态实现条件 1.3动态绑定与静态绑定 1.4向上转型与向下转型 1.5多态的优缺点 1.6需要注意的地方&#x…

【王道操作系统】1.1.2 操作系统的特征(并发、共享、虚拟、异步)

操作系统的特征(并发、共享、虚拟、异步) 文章目录操作系统的特征(并发、共享、虚拟、异步)1.操作系统特征&#xff1a;并发2.操作系统特征&#xff1a;共享3.操作系统特征&#xff1a;虚拟4.操作系统特征&#xff1a;异步操作系统是一种系统软件&#xff0c;但与其它系统软件和…

NXP的mfgtool镜像烧写工具是如何对EMMC进行分区的

本来是想在IMX6ULL板卡上实现u-boot中显示开机logo的功能的&#xff0c;过程中就牵扯出了这几个问题。大概的缘由是修改了u-boot后&#xff0c;想在系统中直接对EMMC中u-boot进行更新&#xff0c;就不用通过SD卡或USB重新烧写了&#xff1b;在更新的时候&#xff0c;又需要知道…

猿如意程序代码生成实践与测试

ChatGPT中国区申请无法直接注册与使用&#xff1b; 使用csdn提供的猿如意效率工具箱提供的chatGPU功能实现智能程序编写实验&#xff1a; 先安装&#xff1a; csdn猿如意下载地址 选择其中的ChatGPT菜单 在右侧窗口中的输入框&#xff0c;可输入问题内容。 &#xff08;1&a…

〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人面临困惑与迷茫应该如何破局?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Leetcode:459. 重复的子字符串(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 移动匹配法&#xff1a; 原理思路&#xff1a; 利用kmp法&#xff1a; 原理思路&#xff1a; 暴力法&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定一个非空的字符串 s &#xff0c;检查是否可以…

55 处理错误的树形数据结构导致不断地添加元素到集合中 OOM

前言 呵呵 这是最近一个 前同事/朋友 碰到的一个问题 主要的问题是 在 dump 文件中发现了很多 LinkedList$Node 的节点 然后 整个问题 抛出来的错误是 OOM 呵呵 这种问题 还是相当好处理的 这里 仅仅是 简单记录一下 前因 后果 测试用例 /*** Test11OomByTree** aut…

关于2022年

也算是传统了&#xff0c;每年到年底的时候&#xff0c;总喜欢做点总结&#xff0c;或许类似于企业里面的年底复盘&#xff0c;但更多的还是碎碎念。往年一般会放在农历新年那一天&#xff0c;今年做点小改变&#xff0c;影响不大。 回顾过去的一年&#xff0c;发现自己基本上…

【HR-VITON】虚拟换衣算法pre-processing复现全过程记录

Link of original Github repo Link of personal made study case of HR-VITON ContentPre1、OpenPose&#xff08;On colab, need GPU&#xff09;2、Human ParseMethod 1: ColabMethod 2: Local or Server3、DensePose (On colab, GPU or CPU)4、Cloth Mask (On colab, GPU o…

【MySQL】InnoDB数据页结构

文章目录1. 前言2. 数据页结构3. 记录在页中的存储4. 记录头信息5. 页目录&#xff08;Page Directory&#xff09;6. 页面头部&#xff08;Page Header&#xff09;7.文件头部&#xff08;Fiile Header&#xff09;8. 文件尾部&#xff08;File Trailer&#xff09;不知不觉20…

JVM调优相关说明

前言 其实听着JVM调优这个词有些高大上&#xff0c;但是等你真正了解了他的内在原理后&#xff0c;还是很容易的。再简单 JVM调优大致可分为如下&#xff1a; 解决JVM运行过程中的问题&#xff08;主要就是内存溢出的问题&#xff09;优化JVM运行时的环境&#xff0c;提高运…

多线程问题(四)

目录 一、常见的锁策略 1、乐观锁 VS 悲观锁 2、读写锁 VS 普通的互斥锁 3、重量级锁 VS 轻量级锁 4、挂起等待锁 VS 自旋锁 6、公平锁 VS 非公平锁 7、可重入锁 VS 不可重入锁 8、synchronized锁的性质 二、CAS 1、CAS的伪代码 2、CAS的应用 a、实现原子类…

【Spring系列】一篇文章开启你的 SpringBoot 之旅

SpringBoot 快速入门一. 环境搭建1.1 环境准备Java环境准备(本人是 JDK 1.8)开发工具 IntelliJ IDEAMaven (可使用 IntelliJ IDEA 自带)二. 快速开始2.1 新建项目打开IDEA 新建 SpringBoot 项目2.2 运行项目Spring Boot 项目运行分析尝试在浏览器中访问2.3 完成第一个接口新建c…

ArcGIS基础实验操作100例--实验30清除坐标系信息

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验30 清除坐标系信息 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff…

运维管理平台OEM定制集成开发,激发IT价值

对硬件设备商而言&#xff0c;借助优秀的网管、运维管理平台&#xff0c;可以形成完整的产品解决方案&#xff0c;直接提升产品的形象和适用范围。同时还可以通过网管、运维管理平台&#xff0c;切入到外围的产品及集成领域&#xff0c;并在用户后续的升级改造活动中占据有利位…

12.31日报

纠正前天的错误&#xff1a; 前天我写&#xff1a; 不知道在mapper中的增删改方法返回值int的值&#xff0c;和含义&#xff0c;在调用方法时也没有定义int来接参&#xff0c;都是直接调用。于是我定义int i&#xff0c;并打印输出&#xff0c;使用postman调用接口方法&#xf…

R语言hdnom包进行高维惩罚 Cox 回归模型绘制列线图-校准曲线-时间依赖ROC-外部验证

Hdnom包可以用于用于给高维数据构建Cox 模型、绘制列线图-校准曲线-时间依赖ROC-外部验证&#xff0c;而且Hdnom包简化了建模过程&#xff0c;带有自动选择变量功能&#xff0c;将用户从繁琐且容易出错的调参过程中解放出来. hdnom提供了多项自动调参和模型选择功能&#xff…

【OpenAI】基于 Gym-CarRacing 的自动驾驶项目 | 前置知识介绍 | 项目环境准备

猛戳&#xff01;跟哥们一起玩蛇啊 &#x1f449; 《一起玩蛇》&#x1f40d; &#x1f4ad; 写在前面&#xff1a; 本篇是关于多伦多大学自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行…

jscharting.js v3.3.1.20220428 Crack

jscharting.js 3.3 版带来了主要的新组织结构图和甘特图扩展&#xff0c;包括甘特关键路径图、组织连接线样式和选择、仪表板小部件、象形图等等。图表渐变支持扩展到包括图标和动态点和系列渐变填充。 JSCharting 团队使用新功能、图表类型和图表小部件制作了超过 55 个高级示…

从发展的趋势来看,数字技术理应是产业互联网时代的驱动力

事实上&#xff0c;以往&#xff0c;我们所经历的那个互联网玩家频出的年代&#xff0c;其实就是一个以互联网技术为主导的年代。在那样一个年代里&#xff0c;互联网技术几乎是解决一切痛点和难题的万能解药&#xff0c;几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…