1、八位二进制BCD码转换器实验报告: 8位二进制-BCD码转换器姓名: 学号: 指导教师:一实验目的了解二进制-BCD码转换器实现原理,掌握移位加3算法,熟悉Verilog编程中模块复用模式。二实验任务1.掌握用移位加三算法实现二进制-BCD码转换器的设计;2.设计Verilog实验程序;3.生成比特流文件,将文件下载到开发板中进行硬件验证。三实验设备1.计算机(安装Xilinx ISE 10.1软件平台);2.NEXYS2 FPGA开发板一套(带USB-MIniUSB下载线)四实验原理设计任意数目输入的二进制-BCD码转换器的方法就是采用移位加三算法(Shift and Add 3 Algor
2、ithm)。此方法包含以下4个步骤:1)把二进制左移1位;2)如果共移了8位,那么BCD数就在百位、十位和个位列;3)如果在BCD列中,任何一个二进制数是5或者比5更大,那么就在BCD列的数值加上3;4)回到步骤1)。其工作过程如图1所示:图1. 一个8位的二进制数转换成BCD码的步骤五实验内容在Xilinx ISE 10.1上完成8位二进制-BCD码转换器设计,输入设计文件,仿真后,生成二进制码流文件下载到FPGA开发板上进行验证;1)依照实验1的方式,在Xilinx ISE 10.1中新建一个工程example02;2)在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New So
3、urce”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“binbcd8.v”,完整代码如下:module binbcd8( input 7:0 b, output reg 9:0 p ); reg 17:0 z; integer i; always (*) begin for (i=0;i4) z11:8=z11:8+3; if (z15:124) z15:12=z15:12+3; z17:1=z16:0; end p=z17:8; end endmodule3)设计相应的7段显示管程序,将相应的十进制数在开发板的显示管上显示出来。建立
4、文件类型为“Verilog Module”的“x7segb.v”,完整代码如下module x7segb( input 15:0 x, input clk, input clr, output reg 6:0 a_to_g, output reg 3:0 an, output dp ); wire1:0 s; reg3:0 digit; wire3:0 aen; reg19:0 clkdiv; assign dp=1; assign s=clkdiv19:18; assign aen3=x15|x14|x13|x12; assign aen2=x15|x14|x13|x12 |x11|x10|
5、x9|x8; assign aen1=x15|x14|x13|x12 |x11|x10|x9|x8 |x7|x6|x5|x4; assign aen0=1; /4位4选1 always (*) case(s) 0:digit=x3:0; 1:digit=x7:4; 2:digit=x11:8; 3:digit=x15:12; default: digit=x3:0; endcase/数码管显示always (*) case (digit) 0: a_to_g = 7b0000001; 1: a_to_g = 7b1001111; 2: a_to_g = 7b0010010; 3: a_to_g
6、 = 7b0000110; 4: a_to_g = 7b1001100; 5: a_to_g = 7b0100100; 6: a_to_g = 7b0100000; 7: a_to_g = 7b0001111; 8: a_to_g = 7b0000000; 9: a_to_g = 7b0000100; hA: a_to_g = 7b0001000; hB: a_to_g = 7b1100000; hC: a_to_g = 7b0110001; hD: a_to_g = 7b1000010; hE: a_to_g = 7b0110000; hF: a_to_g = 7b0111000; defa
7、ult: a_to_g = 7b0000001; / 0endcase /digit select always (*) begin an=4b1111; if(aens=1) ans=0; end /时钟分频器 always (posedge clk or posedge clr) begin if(clr=1) clkdiv=0; else clkdiv=clkdiv+1;endEndmodule4)设计8位二进制-BCD码转换器的顶层模块,如图3所示,下面的程序清单给出了实现这个顶层模块设计的Verilog程序,文件名为“binbcd8_top.v。图3. 顶层模块module binb
8、cd8_top( input mclk, input 3:3 btn, input 7:0 sw, output 7:0 led, output 6:0 seg, output 3:0 an, output dp ); wire 15:0 x; wire 9:0 p; assign x=6b000000,p; assign led=sw; binbcd8 B1 (.b(sw), .p(p) ); x7segb M1 (.x(x), .clk(mclk), .clr(btn3), .a_to_g(seg), .an(an), .dp(dp) );Endmodule5)导入其UCF文件,并进行编辑
9、,代码如下:NET mclk LOC = B8; NET btn LOC = A7; NET sw LOC = P11;NET sw LOC = L3; NET sw LOC = K3;NET sw LOC = B4; NET sw LOC = G3;NET sw LOC = F3; NET sw LOC = E2;NET sw LOC = N3;NET Led LOC = M5; NET Led LOC = M11; NET Led LOC = P7; NET Led LOC = P6; NET Led LOC = N5; NET Led LOC = N4; NET Led LOC = P4
10、; NET Led LOC = G1; NET seg LOC = L14;NET seg LOC = H12;NET seg LOC = N14;NET seg LOC = N11; NET seg LOC = P12; NET seg LOC = L13; NET seg LOC = M12; NET dp LOC = N13; NET an LOC = F12;NET an LOC = J12; NET an LOC = M13;NET an LOC = K14;6)进行综合和实现,然后生成二进制比特文件。7)将生成的二进制比特文件下载到开发板上,观察运行结果。六实验结果七实验心得及体会 通过本次实验让我了解了8位二进制BCD码转换器的工作原理。也让我更加熟悉了ise软件的使用,对Verilog语法有了更深的理解,在本次实验中由于忽略了语法错误,导致实验完成花费了很长时间,让我更了解了Verilog语法的重要性。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1