使用FPGA 83编码器+7段数码管 设计一个8路简易的抢答器(含源码)

直接代码

83编码器:

module Encoder8x3a(
  input En,
  input  [7:0] I,
  output [2:0] Y
  // reg GS
  ); 
  reg [2:0]  Out_coding; 
  assign Y = Out_coding+3'd1;
  
  always @(I)
  begin
  //if(~En)
   // begin
    //   Out_coding=3'd0; GS = 1'b0; 
   // end
  //else begin
    //GS=1'b1;
    casez(I) 
      8'b1???_????:Out_coding = 3'd7;
      8'b01??_????:Out_coding = 3'd6;
      8'b00??_????:Out_coding = 3'd5;
      8'b0001_????:Out_coding = 3'd4;
      8'b0000_1???:Out_coding = 3'd3;
      8'b0000_01??:Out_coding = 3'd2;
      8'b0000_001?:Out_coding = 3'd1;
      8'b0000_0001:Out_coding = 3'd0;
      8'b0000_0000:begin Out_coding = 3'd0; end
      default: begin Out_coding=3'd0; end
    endcase
    //end
  end
endmodule

7段译码器:

module SEG7_LUT (oSEG,iDIG);
input [3:0] iDIG;
output reg [6:0] oSEG;

always @(iDIG)
begin
case(iDIG) 
4'h1: oSEG=7'b111_1001;
4'h2: oSEG=7'b010_0100;
4'h3: oSEG=7'b011_0000;
4'h4: oSEG=7'b001_1001;
4'h5: oSEG=7'b001_0010;
4'h6: oSEG=7'b000_0011;
4'h7: oSEG=7'b111_1000;
4'h8: oSEG=7'b000_0000;
4'h9: oSEG=7'b001_0000;
4'ha: oSEG=7'b000_1000;
4'hb: oSEG=7'b000_0011;
4'hc: oSEG=7'b100_0110;
4'hd: oSEG=7'b010_0001;
4'he: oSEG=7'b000_0110;
4'hf: oSEG=7'b000_1110;
4'h0: oSEG=7'b100_0000;
endcase
end
Endmodule

拼接文件:

module qd(I,oSEG);
  input  [7:0] I;
  output [6:0] oSEG;
  wire   [2:0] t_Y;
  
  Encoder8x3a m1(
  .En(1'b1),
  .I(I),
  .Y(t_Y));
  
  SEG7_LUT m2(
  .iDIG({0,t_Y}),
  .oSEG(oSEG));
Endmodule

测试文件:

`timescale 1ns/1ns 
module t_qd;
  reg [7:0] I;
  wire [6:0] oSEG;

  reg clock;
  
  initial
  begin
    I[7:0]=8'd0;
    clock=1'b0;
  end
  
  always #5 clock = ~clock;
  
  always@(posedge clock)
  begin
    I[7:0]= {$random}%256;
  end
  
  qd m1(
  .I(I),
  .oSEG(oSEG));
endmodule

设计过程按照分为83编码器模块和7段数码管模块进行,使用83编码器去掉使能端,形成8输入3输出,7段数码管拼接时对83输出加以为拼接为4位,然后对设计模块进行例化,之后加入对拼接模块进行加入激励,对输入信号随机处理,计入时钟,最后测试仿真。

问题:

在整个过程中特别注意子模块与父模块的数据类型规定,还有就是出现了关于Modelsim仿真时Object列表为空的问题,搜索网络得知是软件设计的问题,在测试过程中发现,83编码器输入端对于大于8的数字也会输出到数码管,代码只会识别最高位的1,就找不出最先抢答的输入或出错。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值