674|0

53

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

【Tang Primer25K Dock】二——拨码开关和LED的简单测试 [复制链接]

 
本帖最后由 Zhao_kar 于 2023-12-8 23:50 编辑

【Tang Primer25K Dock】二——拨码开关和LED的简单测试

备注:

  • 按照测评计划来,这一节先把拨码开关和led都测试一遍,然后接下来是数码管的测试,后续应该分成两节,这里先提前说一下,这个数码管和我之前接触到的数码管设计都不太一样,之前我接触到的数码管,都是一个数码管由一个位选来控制,位选实际上就是控制亮灭的,也就是说,如果一个4个数码管的,根据原理来(后面讲),我给一个值,四个数码管若全部为亮,,则四个数码管会同时显示一个值,所以为了不一样,需要动态显示。
  • 然而这个数码管,没办法控制亮灭,起码目前我没搞明白,他只有一个位选信号,高低电平分别决定左边和右边哪个亮,所以要想让他像其他的数码管同时显示一个值,别的数码管不需要动态显示电路,而这个设计是默认了你必须使用动态显示,所以后续两节分别为:
  • 一节单独测试数码管从0-9+led的辅助显示的测试,同时计数满一个周期,切换到下一个数码管显示;
  • 一节为数码管的动态显示电路,从00到11,从而到99,去做一个基础的动态显示测试,后续的时钟再考虑别的,然后我是打算画一个数码管模块,这个只有两个和我预期的数字时钟有点差别。
  • 然后本节是一个4_16的译码测试,使用四个拨码开关,分别赋予+1、2、4、8的能力,然后通过16个led去显示结果

一、译码的基本原理的简单解释

  • 先从3_8译码入手,3_8译码其实就是把一个3位的二进制数,转换成8个值,说白了就是类似数值转换,比如3位2进制的所有值,换成十进制,一个道理,换句话说,你可以拿这个3位二进制表示0-7,但是这个只是一个换位的理解,因为实际上一般译码的操作结果并不是这样,比如3‘b000,实际得到的应该是0000_0001,而3’b111,得到的是1000_0000,这个其实是独热码,实际上你的编码方式译码方式可以不用按照这个。
  • 而本节的4_16,是利用现有模块做的一个简单测试,这一节甚至没有时序,上一节怎么说都用了一个时序的计数,这一节就是纯粹的组合逻辑电路。

二、代码和注释

  • //拨码开关+led测试,4-16译码。
  • module SwitchToLED(
  • input [3:0] switch, // 4个拨码开关,控制加值
  • input [3:0] button, //本来打算用按键的,但是考虑到消抖问题,不适合这一节放出,后续会补充
  • output reg [15:0] leds // 16个LED灯
  • );
  • // 将加值之和反馈到LED灯,反转灯的状态
  • always @(*) begin//不依赖时钟
  • case (switch) // 因为是1灭灯,0亮灯
  • 4'b0000: leds = 16'b1111111111111110; // 0-15,从右到左亮灯
  • 4'b0001: leds = 16'b1111111111111101;
  • 4'b0010: leds = 16'b1111111111111011;
  • 4'b0011: leds = 16'b1111111111110111;
  • 4'b0100: leds = 16'b1111111111101111;
  • 4'b0101: leds = 16'b1111111111011111;
  • 4'b0110: leds = 16'b1111111110111111;
  • 4'b0111: leds = 16'b1111111101111111;
  • 4'b1000: leds = 16'b1111111011111111;
  • 4'b1001: leds = 16'b1111110111111111;
  • 4'b1010: leds = 16'b1111101111111111;
  • 4'b1011: leds = 16'b1111011111111111;
  • 4'b1100: leds = 16'b1110111111111111;
  • 4'b1101: leds = 16'b1101111111111111;
  • 4'b1110: leds = 16'b1011111111111111;
  • 4'b1111: leds = 16'b0111111111111111;
  • default: leds = 16'b1111111111111111;//默认状态下全部灭灯
  • endcase
  • end
  • endmodule

 

三、引脚约束

引脚为16个led和4个拨码开关,具体见下图(附带cst)

  • //Copyright (C)2014-2023 Gowin Semiconductor Corporation.
  • //All rights reserved.
  • //File Title: Physical Constraints file
  • //GOWIN Version: V1.9.9 Beta-5
  • //Part Number: GW5A-LV25MG121NES
  • //Device: GW5A-25
  • //Device Version: A
  • //Created Time: Fri 12 08 16:25:12 2023
  • IO_LOC "leds[15]" K5;
  • IO_PORT "leds[15]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[14]" L5;
  • IO_PORT "leds[14]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[13]" L11;
  • IO_PORT "leds[13]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[12]" K11;
  • IO_PORT "leds[12]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[11]" E10;
  • IO_PORT "leds[11]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[10]" E11;
  • IO_PORT "leds[10]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[9]" A10;
  • IO_PORT "leds[9]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[8]" A11;
  • IO_PORT "leds[8]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[7]" C10;
  • IO_PORT "leds[7]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[6]" C11;
  • IO_PORT "leds[6]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[5]" B10;
  • IO_PORT "leds[5]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[4]" B11;
  • IO_PORT "leds[4]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[3]" D10;
  • IO_PORT "leds[3]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[2]" D11;
  • IO_PORT "leds[2]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[1]" G10;
  • IO_PORT "leds[1]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "leds[0]" G11;
  • IO_PORT "leds[0]" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
  • IO_LOC "button[3]" F5;
  • IO_PORT "button[3]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "button[2]" G7;
  • IO_PORT "button[2]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "button[1]" H7;
  • IO_PORT "button[1]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "button[0]" J5;
  • IO_PORT "button[0]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "switch[3]" G5;
  • IO_PORT "switch[3]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "switch[0]" H5;
  • IO_PORT "switch[0]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "switch[1]" H8;
  • IO_PORT "switch[1]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
  • IO_LOC "switch[2]" G8;
  • IO_PORT "switch[2]" PULL_MODE=NONE DRIVE=OFF BANK_VCCIO=3.3;
 
四、补充说明
1、上一节一个东西我忘记说了,就是涉及到时钟的,请在约束部分进行如下设置,不如无法编译,然后这一节是组合逻辑的,其实不需要这个,但是后续时序都要按这个改,后续就不强调了。

2、附带演示视频(背景可能吵,请静音观看)

播放器加载失败: 未检测到Flash Player,请到安装
演示

 

查看本帖全部内容,请登录或者注册
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播报名| TI 面向楼宇和工厂自动化行业的毫米波雷达解决方案
【内容简介】TI 60GHz IWRL6432和 IWRL1432毫米波雷达传感器如何帮助解决楼宇和工厂自动化应用中的感应难题
【直播时间】5月28日(周三)上午10:00
【直播礼品】小米双肩包、contigo水杯、胶囊伞、安克充电器

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 11

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表