目录

  • 1 EDA技术概述
    • 1.1 课前--学生手册
    • 1.2 EDA技术及其发展
    • 1.3 Top-down设计与IP核复用
    • 1.4 EDA设计流程
    • 1.5 EDA工具和发展趋势
    • 1.6 拓展--初学者如何学好FPGA
    • 1.7 拓展--国内EDA的挑战
  • 2 FPGA/CPLD器件概述
    • 2.1 PLD器件原理
    • 2.2 FPGA器件
    • 2.3 拓展--国产FPGA发展
  • 3 Quartus开发工具
    • 3.1 课前--quartus安装
    • 3.2 实践:图形化设计案例--半加器
      • 3.2.1 实践:由半加器到全加器的设计
    • 3.3 实践:基于IP核的设计---LPMcounter
    • 3.4 实践:基于IP核设计---乘法器
    • 3.5 拓展--中国科技壁垒---芯痛
  • 4 Verilog语法与要素
    • 4.1 课前--学生手册1
    • 4.2 似曾相识的Verilog
    • 4.3 课前--学生手册2
      • 4.3.1 课堂活动资料
    • 4.4 课前--学生手册3
      • 4.4.1 课堂活动资料
    • 4.5 课件
    • 4.6 语法要点讲解
    • 4.7 拓展--FPGA技术思维变革
  • 5 Verilog语句
    • 5.1 学习目标及重点
    • 5.2 课前--学生手册1
    • 5.3 过程语句
    • 5.4 赋值语句
    • 5.5 条件语句与循环
    • 5.6 重点:条件语句归纳总结
    • 5.7 课前--学生手册2
    • 5.8 任务与函数
    • 5.9 拓展--后疫情时代科技的发展
  • 6 Verilog设计进阶
    • 6.1 课件
    • 6.2 课前--学生手册1
    • 6.3 门级描述
    • 6.4 行为描述
    • 6.5 数据流描述
    • 6.6 不同描述风格的设计
    • 6.7 多层次结构电路的设计
      • 6.7.1 实践:累加器
    • 6.8 常用组合逻辑电路设计
    • 6.9 课前--学生手册2
    • 6.10 常用时序逻辑电路设计
    • 6.11 知识巩固:温故而知新
    • 6.12 拓展--国内算法发展
  • 7 项目设计与应用
    • 7.1 实践:译码器类
      • 7.1.1 三八译码器设计
      • 7.1.2 数码管显示
      • 7.1.3 7人表决器(显示票数)
    • 7.2 实践:计数器类
      • 7.2.1 4位二进制计数器
      • 7.2.2 数码管的动态扫描
      • 7.2.3 拓展部分(举一反三)
    • 7.3 实践:计时类
      • 7.3.1 课前--学生手册
      • 7.3.2 秒计数器
      • 7.3.3 时钟电路设计
      • 7.3.4 拓展部分(举一反三)
    • 7.4 实践:音乐播放类
      • 7.4.1 音乐播放模式
      • 7.4.2 自动演奏
      • 7.4.3 演奏梁祝
      • 7.4.4 拓展部分(举一反三)
    • 7.5 实践:电子琴设计
      • 7.5.1 矩阵键盘
      • 7.5.2 十六键电子琴
    • 7.6 实践:抢答器设计
    • 7.7 课前--学生手册
    • 7.8 实践:串口发送字符串
    • 7.9 拓展--FPGA解决方案应用
  • 8 有限状态机设计
    • 8.1 有限状态机
    • 8.2 实践:状态机类
      • 8.2.1 流水灯跑马灯
      • 8.2.2 汽车尾灯控制器
      • 8.2.3 十字路口的交通灯控制
      • 8.2.4 1001序列检测器
    • 8.3 拓展--智能技术的发展
  • 9 Test Bench仿真
    • 9.1 组合电路和时序电路的仿真
    • 9.2 实践:四选一选择器测试程序
    • 9.3 拓展--科技时代下,如何把握机遇
  • 10 开发板及综合设计案例
    • 10.1 开发板设计
    • 10.2 综合设计案例
    • 10.3 程序调试易错点
      • 10.3.1 101引脚分配报错
  • 11 复习
    • 11.1 语法知识思维导图
实践:抢答器设计

(1)设计一个四人抢答器,主持人每次公布抢答题目后,按下抢答键,即可开始抢答,显示抢答成功者序号。

module qiangda(s1,s2,s3,s4,start,ledag,wei,light);

input s1,s2,s3,s4,start; //四位选手按键,主持人按键

output reg[3:0] light; //指示灯

output reg[7:0] wei;

output reg[6:0] ledag;

reg ena;  //ena=1允许抢答

reg[3:0] d,s;  //

always@(s1,s2,s3,s4,start)

begin

s<={s1,s2,s3,s4};

if(!start) ena<=1;

else if(s!=4'b1111) ena<=0;

end 

always@(start,s1)  //1号选手抢答

begin

if(!start) d[0]<=0;

else if(ena&&(!s1)) d[0]<=1;

end

always@(start,s2)  //2号选手抢答

begin

if(!start) d[1]<=0;

else if(ena&&(!s2)) d[1]<=1;

end

always@(start,s3)  //3号选手抢答

begin

if(!start) d[2]<=0;

else if(ena&&(!s3)) d[2]<=1;

end

always@(start,s4)  //4号选手抢答

begin

if(!start) d[3]<=0;

else if(ena&&(!s4)) d[3]<=1;

end

always@(d)

case(d)

4'b0000:begin ledag<=7'b0000001;wei<=8'b00000000;light<=4'b1111;end

4'b0001:begin ledag<=7'b1001111;wei<=8'b00000001;light<=4'b1110;end

4'b0010:begin ledag<=7'b0010010;wei<=8'b00000010;light<=4'b1101;end

4'b0100:begin ledag<=7'b0000110;wei<=8'b00000100;light<=4'b1011;end

4'b1000:begin ledag<=7'b1001100;wei<=8'b00001000;light<=4'b0111;end

default:begin ledag<=7'b0000001; wei<=8'b00000000;light<=4'b1111;end

endcase

endmodule

抢答器的实验演示: