记录使用Spartan-6 FPGA进行一次3-8译码器实验

举报
李锐博恩 发表于 2021/07/15 07:51:11 2021/07/15
【摘要】 之前仔细的记录过一次PWM蜂鸣器的实验,见博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制,这里就不再仔细的写下全过程了,因为都是一样的过程,只记录一下做这个小实验的思路即可。 3-8译码器实验 SW3 SW6,SW5,SW4 复位 点亮LED X X,X,X 0 全灭 OFF X,X,X 1 全灭 ON OFF,OFF,OFF 1...

之前仔细的记录过一次PWM蜂鸣器的实验,见博文:全过程实现一个最简单的FPGA项目之PWM蜂鸣器控制,这里就不再仔细的写下全过程了,因为都是一样的过程,只记录一下做这个小实验的思路即可。

3-8译码器实验

SW3

SW6SW5SW4

复位

点亮LED

X

X,X,X

0

全灭

OFF

X,X,X

1

全灭

ON

OFF,OFF,OFF

1

D2点亮

ON

OFF,OFF,ON

1

D3点亮

ON

OFF,ON,OFF

1

D4点亮

ON

OFF,ON,ON

1

D5点亮

ON

ON,OFF,OFF

1

D6点亮

ON

ON,OFF,ON

1

D7点亮

ON

ON,ON,OFF

1

D8点亮

ON

ON,ON,ON

1

D9点亮

如上图,使用拨码开关来代表3-8译码器的输入,拨码开关处于“ON”状态时,SW0输出低电平;当拨码开关处于“OFF”状态时,SW0输出高电平

根据此,编写Verilog 设计代码。

Verilog HDL语言描述


  
  1. module sp6(
  2. input ext_clk_25m, //外部输入25MHz时钟信号
  3. input ext_rst_n, //外部输入复位信号,低电平有效
  4. input[3:0] switch, //4个拨码开关接口,ON -- 低电平;OFF -- 高电平
  5. output reg[7:0] led //8个LED指示灯接口
  6. );
  7. //-------------------------------------
  8. always @ (posedge ext_clk_25m or negedge ext_rst_n)
  9. if(!ext_rst_n) led <= 8'hff; //所有LED关闭
  10. else if(switch[0]) led <= 8'hff; //SW3处于OFF状态,所有LED关闭
  11. else begin //SW3处于ON状态,点亮的LED位由SW4/SW5/SW6这3个拨码开关输入结果决定
  12. case(switch[3:1])
  13. 3'b111: led <= 8'b1111_1110; //D2点亮
  14. 3'b110: led <= 8'b1111_1101; //D3点亮
  15. 3'b101: led <= 8'b1111_1011; //D4点亮
  16. 3'b100: led <= 8'b1111_0111; //D5点亮
  17. 3'b011: led <= 8'b1110_1111; //D6点亮
  18. 3'b010: led <= 8'b1101_1111; //D7点亮
  19. 3'b001: led <= 8'b1011_1111; //D8点亮
  20. 3'b000: led <= 8'b0111_1111; //D9点亮
  21. default: ;
  22. endcase
  23. end
  24. endmodule

查表或查看电路图可知,复位以及全局时钟、LED灯和拨码开关的引脚编号:

根据这些来编写引脚约束:


  
  1. # PlanAhead Generated physical constraints
  2. NET "led[7]" LOC = P81;
  3. NET "led[6]" LOC = P82;
  4. NET "led[5]" LOC = P83;
  5. NET "led[4]" LOC = P84;
  6. NET "led[3]" LOC = P85;
  7. NET "led[2]" LOC = P87;
  8. NET "led[1]" LOC = P88;
  9. NET "led[0]" LOC = P92;
  10. NET "switch[1]" LOC = P79;
  11. NET "switch[0]" LOC = P80;
  12. NET "switch[2]" LOC = P78;
  13. NET "switch[3]" LOC = P74;
  14. NET "ext_clk_25m" LOC = P55;
  15. NET "ext_rst_n" LOC = P62;

由于实验使用资源少,所以没必要进行时序约束,因此,直接进行综合、实现、产生可配置文件、板上调试即可。

调试的结果与第一个表格结果一致。

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/81712246

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。