差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
4bits_adder_seg [2021/10/09 16:40]
gongyu [3. Verilog代码]
4bits_adder_seg [2021/10/09 16:54] (当前版本)
gongyu [2. 硬件连接]
行 12: 行 12:
  
 ### 2. 硬件连接 ### 2. 硬件连接
-{{drawio>​4bitsadder_seg.png}}+{{drawio>​4bitsadder_seg.png}} ​<WRAP centeralign>​ 小脚丫FPGA用于实现4位加法器并结果输出的连接示意图 </​WRAP>​ 
  
 ### 3. Verilog代码 ### 3. Verilog代码
行 80: 行 81:
  
 <code python> <code python>
 +module binary2bcd(binary_data,​tens,​ones);​
 +input [4:0] binary_data;​
 +output reg [3:0] tens;
 +output reg [3:0] ones;
 +
 +always @*
 +case(binary_data)
 +    5'​d0: ​
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd0;
 +        end
 +    5'd1:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd1;
 +        end
 +    5'd2:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd2;
 +        end
 +    5'd3:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd3;
 +        end
 +    5'd4:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd4;
 +        end
 +    5'd5:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd5;
 +        end
 +    5'd6:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd6;
 +        end
 +    5'd7:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd7;
 +        end
 +    5'd8:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd8;
 +        end
 +    5'd9:
 +        begin
 +            tens = 4'd0;
 +            ones = 4'd9;
 +        end
 +    5'​d10: ​
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd0;
 +        end
 +    5'd11:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd1;
 +        end
 +    5'd12:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd2;
 +        end
 +    5'd13:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd3;
 +        end
 +    5'd14:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd4;
 +        end
 +    5'd15:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd5;
 +        end
 +    5'd16:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd6;
 +        end
 +    5'd17:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd7;
 +        end
 +    5'd18:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd8;
 +        end
 +    5'd19:
 +        begin
 +            tens = 4'd1;
 +            ones = 4'd9;
 +        end
 +    5'​d20: ​
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd0;
 +        end
 +    5'd21:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd1;
 +        end
 +    5'd22:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd2;
 +        end
 +    5'd23:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd3;
 +        end
 +    5'd24:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd4;
 +        end
 +    5'd25:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd5;
 +        end
 +    5'd26:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd6;
 +        end
 +    5'd27:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd7;
 +        end
 +    5'd28:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd8;
 +        end
 +    5'd29:
 +        begin
 +            tens = 4'd2;
 +            ones = 4'd9;
 +        end
 +    5'd30:
 +        begin
 +            tens = 4'd3;
 +            ones = 4'd0;
 +        end
 +    5'd31:
 +        begin
 +            tens = 4'd3;
 +            ones = 4'd1;
 +        end
 +endcase
 +
 +/*
 +integer i;
 +
 +always @(binary_data)
 +begin
 +    tens = 4'd0;
 +    ones = 4'd0;
 +    ​
 +    for (i=7; i >= 0; i=i-1)
 +    begin
 +        if (tens>​=5)
 +            tens = tens +3;
 +        if (ones >= 5)
 +            ones = ones +3;
 +        tens = tens << 1;
 +        tens[0] = ones[3];
 +        ones = ones << 1;
 +        ones[0] = binary_data[i];​
 +    end
 +end
 +*/
 +
 +endmodule
  
 </​code>​ </​code>​
 +
  
 <code python> <code python>
 +// ********************************************************************
 +// >>>>>>>>>>>>>>>>>>>>>>>>>​ COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<​
 +// ********************************************************************
 +// File name    : segment.v
 +// Module name  : segment
 +// Author ​      : STEP
 +// Description ​ : segment initial
 +// Web          : www.stepfpga.com
 +// 
 +// --------------------------------------------------------------------
 +// Code Revision History : 
 +// --------------------------------------------------------------------
 +// Version: |Mod. Date:   ​|Changes Made:
 +// V1.0     ​|2021/​10/​08 ​  ​|Initial ver
 +// --------------------------------------------------------------------
 +// Module Function:​数码管的译码模块初始化
  
-</​code>​+module LED (seg_data_1,​seg_data_2,​seg_led_1,​seg_led_2);​
  
 + input [3:0] seg_data_1;​ //​数码管需要显示0~9十个数字,所以最少需要4位输入做译码
 + input [3:0] seg_data_2;​ //​小脚丫上第二个数码管
 + output [8:0] seg_led_1;​ //​在小脚丫上控制一个数码管需要9个信号 MSB~LSB=DIG、DP、G、F、E、D、C、B、A
 + output [8:0] seg_led_2;​ //​在小脚丫上第二个数码管的控制信号 ​ MSB~LSB=DIG、DP、G、F、E、D、C、B、A
 +
 +        reg [8:0] seg [9:​0]; ​           //​定义了一个reg型的数组变量,相当于一个10*9的存储器,存储器一共有10个数,每个数有9位宽
 +        ​
 +        initial ​                        //​在过程块中只能给reg型变量赋值,Verilog中有两种过程块always和initial
 +                                        //​initial和always不同,其中语句只执行一次
 +     begin
 +          seg[0] = 9'​h3f; ​              //​对存储器中第一个数赋值9'​b00_0011_1111,​相当于共阴极接地,DP点变低不亮,7段显示数字 ​ 0
 +       seg[1] = 9'​h06; ​              //​7段显示数字 ​ 1
 +       seg[2] = 9'​h5b; ​              //​7段显示数字 ​ 2
 +       seg[3] = 9'​h4f; ​              //​7段显示数字 ​ 3
 +       seg[4] = 9'​h66; ​              //​7段显示数字 ​ 4
 +       seg[5] = 9'​h6d; ​              //​7段显示数字 ​ 5
 +       seg[6] = 9'​h7d; ​              //​7段显示数字 ​ 6
 +       seg[7] = 9'​h07; ​              //​7段显示数字 ​ 7
 +       seg[8] = 9'​h7f; ​              //​7段显示数字 ​ 8
 +       seg[9] = 9'​h6f; ​              //​7段显示数字 ​ 9
 +        end
 +        ​
 +        assign seg_led_1 = seg[seg_data_1];​ //​连续赋值,这样输入不同四位数,就能输出对于译码的9位输出
 +        assign seg_led_2 = seg[seg_data_2];​
 +
 +endmodule
 +</​code>​
  
  
 ### 4. 管脚分配 ### 4. 管脚分配
 +{{ :​4bitsadder_pinout.jpg |}} <WRAP centeralign>​ 用数码管显示结果的4位加法器的管脚分配图 </​WRAP>​
 +
  
 ### 5. 功能验证 ### 5. 功能验证