草庐IT

【verilog】用七段数码管显示二进制编码的十进制数

芋泥* 2024-04-10 原文

实验目的

用七段数码管显示0~9,输入为四个信号,这四位二进制数表示十进制的0~9

实验原理与内容

图1 逻辑电路与七段显示器

图2 真值表

  • 根据卡诺图,得出a~g的逻辑表达式:
a=~X2~X0+X1+X2X0+X3

b=~X2+~X1~X0+X1X0

c=~X1+X2+X0

d=~X2~X0+X1~X0+~X2X1+X3+X2X0~X1

e=~X2~X0+X1~X0

f=~X1~X0+X3+X2~X1+X2~X0

g=~X2X1+X2~X1+X2~X0+X3

硬件描述语言:

module exp2(X3,X2,X1,X0,a,b,c,d,e,f,g);

 input X3,X2,X1,X0;

 output a,b,c,d,e,f,g;

 assign a=(~X2&~X0)|X1|(X2&X0)|X3;

 assign b=(~X2)|(~X1&~X0)|(X1&X0);

 assign c=~X1|X2|X0;

 assign d=(~X2&~X0)|(X1&~X0)|(~X2&X1)|X3|(X2&X0&~X1);

 assign e=(~X2&~X0)|(X1&~X0);

 assign f=(~X1&~X0)|X3|(X2&~X1)|(X2&~X0);

 assign g=(~X2&X1)|(X2&~X1)|(X2&~X0)|X3;

endmodule

实验过程

图4 代码编译成功

图5 电路图

图6 仿真波形

表1 端口管脚分配表

端口

使用模块信号

对应FPGA管脚

功能说明

X3

拨动开关K1

Pin_W6

控制输入的四个信号的高低电平

X2

拨动开关K2

Pin_Y4

X1

拨动开关K3

Pin_U7

X0

拨动开关K4

Pin_V3

a

Hseg_D0

Pin_AB9

7-segment displays a

b

Hseg_D1

Pin_AA8

7-segment displays b

c

Hseg_D2

Pin_AA7

7-segment displays c

d

Hseg_D3

Pin_AA4

7-segment displays d

e

Hseg_D4

Pin_AB5

7-segment displays e

f

Hseg_D5

Pin_AB8

7-segment displays f

g

Hseg_D6

Pin_AB7

7-segment displays g

图7 管脚分配完成窗口

实验体会及改进建议

  1. 在求a~g的逻辑表达式时要细心认真,防止出错、花费大量时间来改正
  2. 这次实验让我对verilog语言在内的quartus软件更加熟练了,再次体会到它的强大和魅力
  3. 确认所求a~g的逻辑表达式是否为最简,电路成本是否最低,如果不是,怎么改进

有关【verilog】用七段数码管显示二进制编码的十进制数的更多相关文章

  1. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  2. Ruby - 如何将消息长度表示为 2 个二进制字节 - 2

    我正在使用Ruby,我正在与一个网络端点通信,该端点在发送消息本身之前需要格式化“header”。header中的第一个字段必须是消息长度,它被定义为网络字节顺序中的2二进制字节消息长度。比如我的消息长度是1024。如何将1024表示为二进制双字节? 最佳答案 Ruby(以及Perl和Python等)中字节整理的标准工具是pack和unpack。ruby的packisinArray.您的长度应该是两个字节长,并且按网络字节顺序排列,这听起来像是n格式说明符的工作:n|Integer|16-bitunsigned,network(bi

  3. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  4. ruby - ruby 脚本可以预编译成二进制文件吗? - 2

    我正在开发一个Ruby脚本,需要在没有Ruby解释器的情况下部署到系统上。它将需要在使用ELF格式的FreeBSD系统上运行。我知道有一个ruby​​2exe项目可以编译在Windows上运行的ruby​​脚本,但是在其他操作系统上这样做容易吗?甚至可能吗? 最佳答案 您是否检查过Rubinius或JRuby是否允许您预编译您的代码? 关于ruby-ruby脚本可以预编译成二进制文件吗?,我们在StackOverflow上找到一个类似的问题: https://

  5. ruby - 如何在 Ruby 中将负整数转换为二进制 - 2

    问题1:我无法通过以下方式找到将负整数转换为二进制的方法。我应该像这样转换它。-3=>"11111111111111111111111111111101"我在下面试过:sprintf('%b',-3)=>"..101"#..appearsanddoesnotshow111111bit.-3.to_s(2)=>"-11"#Thisjustadds-tothebinaryofthepositiveinteger3.问题2:有趣的是,如果我使用在线转换器,它告诉我-3的二进制是“0010110100110011”。"11111111111111111111111111111101"和"001

  6. Ruby#index 方法 VS 二进制搜索 - 2

    给定一个元素和一个数组,Ruby#index方法返回元素在数组中的位置。我使用二进制搜索实现了我自己的索引方法,期望我的方法会优于内置方法。令我惊讶的是,内置的在实验中的运行速度大约是我的三倍。有Rubyist知道原因吗? 最佳答案 内置#indexisnotabinarysearch,这只是一个简单的迭代搜索。但是,它是用C而不是Ruby实现的,因此自然可以快几个数量级。 关于Ruby#index方法VS二进制搜索,我们在StackOverflow上找到一个类似的问题:

  7. Verilog使用inout信号的方法 - 2

    目录一、inout在设计文件中的使用方法1.1、inout的第一种使用方法1.2、inout实现的第二种使用方法1.3、inout使用总结 二、inout在仿真测试中的使用方法一、inout在设计文件中的使用方法在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPIFlash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号,这里总结一下双向信号的处理方法。1.1、inout的第一种使用方法  实际上,双向信号的本质是由一个三态门组成的,三态门可以输出高电平,低电

  8. ruby - 如何在 Ruby 中返回整数的固定长度二进制表示? - 2

    我知道我可以使用Fixnum#to_s将整数表示为二进制格式的字符串。但是1.to_s(2)生成1而我希望它生成00000001。我怎样才能使所有返回的字符串都以零作为填充到8个字符?我可以使用类似的东西:binary="#{'0'*(8-(1.to_s(2)).size)}#{1.to_s(2)}"if(1.to_s(2)).size但这看起来不是很优雅。 最佳答案 使用字符串格式。"%08b"%1#=>"00000001" 关于ruby-如何在Ruby中返回整数的固定长度二进制表示?

  9. Ruby to_s 转换为二进制(参数中的 Splat 运算符) - 2

    如果我运行以下代码,前两行会返回我所期望的结果。然而,第三个返回2的二进制表示。2.to_s#=>"2"2.to_s*2#=>"22"2.to_s*2#=>"10"我知道在调用to_s时传入2会将我的输出转换为二进制,但为什么to_s忽略第三个中的*案件?如果有任何不同,我正在运行Ruby1.9.2。 最佳答案 对,正如Namida已经提到的,Ruby解释2.to_s*2作为2.to_s(*2)因为方法调用中的圆括号在Ruby中是可选的。这里的星号就是所谓的splatoperator.这里唯一令人费解的问题是为什么*2的计算结果为2

  10. Ruby:将十进制的日期转换为名称的日期 - 2

    是否可以将strftime("%u")值快速转换为strftime("%A")或我是否需要构建一个等价散列,如{"Monday"=>1,.........“星期日”=>6}我有一个以某天为十进制值的数组class_index=[2,6,7]我想遍历这个数组来构建这样的天数数组[nil,"Tuesday",nil,nil,nil,"Saturday","Sunday"]所以我可以做class_list=[]class_index.eachdo|x|class_list[x-1]=convertxvaluetodaynameend这可能吗? 最佳答案

随机推荐