基于FPGA的ALU计算器verilog实现

news2024/10/5 21:14:41

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》

目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

       Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。

       Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
       Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
       Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

利用verilog语言设计微处理器的算术逻辑电路,对电路进行合理规划和尽可能的优化。

(1) 能够完成16位有符号数的算术逻辑运算。

(2)设计独立矩阵键盘和功能键,辅助完成功能验证。

(3) 采用适当的形式显示结果。

二、核心程序

module keys(
              s0,//1
              s1,//2
              s2,//3
              s3,//+
              s4,//4
              s5,//5
              s6,//6
              s7,//-
              s8,//7
              s9,//8
              s10,//9
              s11,//*
              s12,//0
              s13,//=
              s14,//SIGN
              s15,///
              num,
              fadd,
              fsub,
              fmult,
              fdiv,
              fsig,
              fequ             
           );
           
input s0;
input s1;
input s2;
input s3;

input s4;
input s5;
input s6;
input s7;

input s8;
input s9;
input s10;
input s11;

input s12;
input s13;
input s14;
input s15;



output[3:0]num;
output     fadd;
output     fsub;
output     fmult;
output     fdiv;
output     fsig;
output     fequ;

reg[3:0]num  =4'b0000;
reg     fadd =1'b0;
reg     fsub =1'b0;
reg     fmult=1'b0;
reg     fdiv =1'b0;
reg     fsig =1'b0;
reg     fequ =1'b0;



wire[15:0] control;

assign control={s15,s14,s13,s12,s11,s10,s9,s8,s7,s6,s5,s4,s3,s2,s1,s0};

always @(s0 or s1 or s2 or s3  or s4  or s5  or s6  or s7  or s8  or s9  or s10  or s11  or s12 or s13  or s14  or s15)
begin
     case(control)
     16'b0000_0000_0000_0001:begin
							  num  =4'd1;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end
     16'b0000_0000_0000_0010:begin
							  num  =4'd2;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                             
     16'b0000_0000_0000_0100:begin
							  num  =4'd3;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                               
     16'b0000_0000_0000_1000:begin
							  num  =4'd0;
							  fadd =1'b1;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                             



     16'b0000_0000_0001_0000:begin
							  num  =4'd4;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end
     16'b0000_0000_0010_0000:begin
							  num  =4'd5;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                             
     16'b0000_0000_0100_0000:begin
							  num  =4'd6;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                               
     16'b0000_0000_1000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b1;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end



 
     16'b0000_0001_0000_0000:begin
							  num  =4'd7;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end
     16'b0000_0010_0000_0000:begin
							  num  =4'd8;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                             
     16'b0000_0100_0000_0000:begin
							  num  =4'd9;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                               
     16'b0000_1000_0000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b1;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end 
 
 
 
 
     16'b0001_0000_0000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end
     16'b0010_0000_0000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b1; 
                             end                             
     16'b0100_0000_0000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b1;
							  fequ =1'b0; 
                             end                               
     16'b1000_0000_0000_0000:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b1;
							  fsig =1'b0;
							  fequ =1'b0; 
                             end                             
                             
     default:begin
							  num  =4'd0;
							  fadd =1'b0;
							  fsub =1'b0;
							  fmult=1'b0;
							  fdiv =1'b0;
							  fsig =1'b0;
							  fequ =1'b0; 
             end    
      endcase                               
end


endmodule

三、测试结果

加法器的仿真:

其效果如下所示:

减法器的仿真:

乘法器的仿真:

除法器的仿真:

以上是四个运算器的设计,下面要将其整合,得到ALU控制器。

我们需要设计一个输入选择器用来识别我们输入的指令。

这个就是ALU控制器的核心模块,下面要对外部接口进行设计。

键盘我们在本系统设计的布局如下所示:

1

2

3

+

4

5

6

-

7

8

9

*

0

=

Sign

/

这个是典型的矩阵键盘。

0:1

1:2

2:3

3:+

4:4

5:5

6:6

7:-

8:7

9:8

10:9

11:*

12:0

13:=

14:sign

15:/

键盘的主要识别采用状态机来实现。

状态1:输入第一个数字

状态2:输入操作符号

状态3:输入第二个数字

状态4:等于

A02-39

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

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

相关文章

粒子群算法查找函数最小值

实现 函数 F01、F06 的优化测试 以下内容是现有算法的运行结果、调参分析、及代码实现,用于给其他人提供参考,懒得改了hh 1. 运行结果 参数 w 0.5 (可更改) c1 2.0 (可更改) c2 2.0 (可更改&…

2.每天进步一点点-Python爬虫需要了解一下基础的web相关内容

14天学习训练营导师课程: 杨鑫《Python 自学编程基础》 杨鑫《 Python 网络爬虫基础》 杨鑫《 Scrapy 爬虫框架实战和项目管理》 文章目录1.网络请求过程1.1通过 URL 查找服务器 IP1.2三次握手建立 TCP 连接1.3发送 HTTP 请求1.4服务器响应请求1.5浏览器解析 HTML1.…

21年-自研-笔试题

目录背景题目1、Object的常用方法2、 和 equals 的区别是什么?equals3、以下代码的运行结果4、以下代码的运行结果5、String, StringBuilder,StringBuffer6、ArrayList和LinkedList7、一些常用的线程安全的集合类8、以下代码的运行结果9、完成下面的代码…

Java环境准备——JDK下载和安装、IDEA下载和安装

一、JDK下载及安装 1、必要性:JDK是整个Java开发的核心。 2、下载网址:Java Downloads | Oracle 3、选择下载JDK17的原因:JDK17 是Java的长期支持版本。 4、下载到本地后,双击进行安装,然后点击下一步,安…

AI物品分类识别管理系统uniapp源码带文档教程

技术架构 技术框架:SpringBoot2 Mysql5.7 Mybatis-Plus uniapp Swagger2 RuoYi-fast swagger-bootstrap-ui 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 百度智能云平台服务 本地api接口端搭建教程 后端需要准备相关的IDE和JDK8开发环境 , 前…

GIT技巧

目录 基础命令 commit 、branch merge rebase 高级特性 自由修改提交树 cherry-pick rebase 远程仓库命令 基础命令 commit 、branch Git Commit Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样…

Linux内核中ideapad-laptop.c文件全解析6

接前一篇文章《Linux内核中ideapad-laptop.c文件全解析5》,地址为: Linux内核中ideapad-laptop.c文件全解析5_蓝天居士的博客-CSDN博客 上一篇详细分析了ideapad_debugfs_init,本篇详细分析ideapad_input_init。 ideapad_input_init ideap…

Word控件Spire.Doc 【图像形状】教程(7): 如何使用 C# 在 Word 中替换图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

b站黑马JavaScript的Ajax案例代码——聊天机器人案例

目录 目标效果: 更换的新接口: 1.机器人智能回复接口:http://www.liulongbin.top:3006/api/robot 2.机器人语音接口:http://www.liulongbin.top:3006/api/synthesize 重点原理: 1.jQuery中trim方法 2.jquery中a…

Hive数据查询语言-DQL-含示例演练(Select查询数据、Join查询)

文章目录1. Select查询数据1.1 基础语法1.1.1 select_ecpr1.1.2 ALL、DISTINCT1.1.3 WHERE1.1.4 分区查询、分区裁剪1.1.5 GROUP BY1.1.6 HAVING1.1.7 LIMIT1.1.8 执行顺序1.2 高阶语法1.2.1 ORDER BY1.2.2 CLUSTER BY1.2.4 Union联合查询1.2.5 from子查询(Subqueri…

Allegro自动沿着目标任意形状走线操作指导

Allegro自动沿着目标任意形状走线操作指导 Allegro有个非常好用的功能,支持自动沿着目标任意形状走线,对于异形板框走线尤其方便,以下图为例,需要沿着这个外形走一段线 具体操作如下 点击add connect命令 点击空白处 鼠标右击选择contour命令 出现一个对话框,当前是…

03【Spring AOP、CGBLIB代理】

文章目录03【Spring AOP、CGBLIB代理】一、AOP前奏1.1 案例1.1.1 需求设计1.1.2 需求修改1.1.3 需求增加1.1.4 分析存在的问题1.2 动态代理1.2.1 定义接口:1.2.2 日志代理类1.2.3 缓存代理类:1.2.4 测试类二、AOP2.1 AOP 概述2.1.1 纵向编程2.1.2 纵横配…

【Java进阶篇】第六章 IO流

文章目录一、IO流的概述1、流2、流的分类3、Java IO流的四大块4、流的两大特性5、java.io包下的16个常用流二、文件专属流1、java.io.FileInputStream2、java.io.FileOutputStream3、java.io.FileReader4、java.io.FileWriter三、缓冲流与转换流1、java.io.BufferedReader2、ja…

【面试题】深度解析Java多线程中的 run() 与 start() 有什么区别?

【面试题】深度解析Java多线程中的 run() 与 start() 有什么区别? 大多数人的回答 start() run() 深入底层源码的解析 run() 与 start() 为什么我们不能直接调用 run() 方法? 如何证明 start() 会调用 run() 方法? JVM -> OS执行全…

Nodejs -- 数据库基本概念的介绍及在Express中操作数据库

文章目录1. 数据库的基本概念1.1 什么是数据库1.2 常见的数据库及分类1.3 传统型数据库的数据组织结构1.3.1 Excel的数据组织结构1.3.2 传统型数据库的数据组织结构1.3.3 实际开发中库、表、行、字段的关系2. 在Express中操作MySQL2.1 在项目中操作数据库的步骤2.2 安装与配置m…

Java编程案例:买飞机票

编程案例: 一、目的 复习前半段课程学习的Java编程知识,能够使用所学的知识解决问题,提升同学们的编程能力。 二、涉及到的知识点 变量、数组。运算符:基本运算符、关系运算符、逻辑运算符…程序流程控制:if、switc…

np.meshgrid()函数

文章目录(1)自己理解(2)官方解释(3)参数:3.1 x1, x2,…, xn:array_like3.2 sparse:bool, optional 默认false3.3 copy:bool, optional(1)自己理解 np.meshgrid(a, b,indexing "xy") 函数会返回 b.shape() 行 ,a.shape() 列的二维数组。 因此 i, j 都是 …

【序列召回推荐】(task6)多兴趣召回Comirec-SA

note Comirec-SA基于attention的多兴趣建模,论文中先通过attention提取单一兴趣,再推广到多兴趣建模。另外使用贪心算法优化带有准确度多样性的目标函数。DR把MIND的attention换成argmax(还有初始化方式不同、序列胶囊到兴趣胶囊用可学习权重…

2.线性代数基础

1.矩阵 2. 特殊矩阵 正交矩阵 AATE(E为单位矩阵,AT表示“矩阵A的转置矩阵”。)或ATAE,则n阶实矩阵A称为正交矩阵 正交矩阵有如下性质: A是正交矩阵,AT也是正交矩阵A的各行是单位向量且两两正交&#xff0…

html实现ezuikit.js萤石云直播监控,ezuikit.js实时监控实现,萤石云实时监控简单实现

效果图 实现 下面的播放url获取:登录萤石云->控制台->我的资源->设备列表->列表中:查看通道->监控地址 appKey和appSecret获取:登录萤石云->控制台->我的账号->应用信息->右侧:应用密钥 下载ezuikit…