1、学生学号 0121410870432实验成绩学 生 实 验 报 告 书实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生 姓 名付天纯学生专业班级物联网14032015-2016学年第一学期译码器的设计与实现【实验要求】:(1)理解译码器的工作原理,设计并实现n-2n译码器,要求能够正确地根据输入信号译码成输出信号。(2)要求实现2-4译码器、3-8译码器、4-16译码器、8-28译码器、16-216译码器、32-232译码器。【实验目的】 (1)掌握译码器的工作原理;(2)掌握n-2n译码器的实现。【实验环境】u Basys3 FPGA开发板,69套。u
2、 Vivado2014 集成开发环境。u Verilog编程语言。【实验步骤】一功能描述输入由五个拨码开关控制,利用led灯输出32种显示二真值表三电路图和表达式四源代码module decoder_5( input 4:0 a, output 15:0 d0 ); reg 15:0 d0; reg 15:0 d1; always (a) begin case(a) 5b00000 :d1,d0=32b1000_0000_0000_0000_0000_0000_0000_0000; 5b00001 :d1,d0=32b0100_0000_0000_0000_0000_0000_0000_000
3、0; 5b00010 :d1,d0=32b0010_0000_0000_0000_0000_0000_0000_0000; 5b00011 :d1,d0=32b0001_0000_0000_0000_0000_0000_0000_0000; 5b00100 :d1,d0=32b0000_1000_0000_0000_0000_0000_0000_0000; 5b00101 :d1,d0=32b0000_0100_0000_0000_0000_0000_0000_0000; 5b00110 :d1,d0=32b0000_0010_0000_0000_0000_0000_0000_0000; 5b
4、00111 :d1,d0=32b0000_0001_0000_0000_0000_0000_0000_0000; 5b01000 :d1,d0=32b0000_0000_1000_0000_0000_0000_0000_0000; 5b01001 :d1,d0=32b0000_0000_0100_0000_0000_0000_0000_0000; 5b01010 :d1,d0=32b0000_0000_0010_0000_0000_0000_0000_0000; 5b01011 :d1,d0=32b0000_0000_0001_0000_0000_0000_0000_0000; 5b01100
5、 :d1,d0=32b0000_0000_0000_1000_0000_0000_0000_0000; 5b01101 :d1,d0=32b0000_0000_0000_0100_0000_0000_0000_0000; 5b01110 :d1,d0=32b0000_0000_0000_0010_0000_0000_0000_0000; 5b01111 :d1,d0=32b0000_0000_0000_0001_0000_0000_0000_0000; 5b10000 :d1,d0=32b0000_0000_0000_0000_1000_0000_0000_0000; 5b10001 :d1,
6、d0=32b0000_0000_0000_0000_0100_0000_0000_0000; 5b10010 :d1,d0=32b0000_0000_0000_0000_0010_0000_0000_0000; 5b10011 :d1,d0=32b0000_0000_0000_0000_0001_0000_0000_0000; 5b10100 :d1,d0=32b0000_0000_0000_0000_0000_1000_0000_0000; 5b10101 :d1,d0=32b0000_0000_0000_0000_0000_0100_0000_0000; 5b10110 :d1,d0=32
7、b0000_0000_0000_0000_0000_0010_0000_0000; 5b10111 :d1,d0=32b0000_0000_0000_0000_0000_0001_0000_0000; 5b11000 :d1,d0=32b0000_0000_0000_0000_0000_0000_1000_0000; 5b11001 :d1,d0=32b0000_0000_0000_0000_0000_0000_0100_0000; 5b11010 :d1,d0=32b0000_0000_0000_0000_0000_0000_0010_0000; 5b11011 :d1,d0=32b0000
8、_0000_0000_0000_0000_0000_0001_0000; 5b11100 :d1,d0=32b0000_0000_0000_0000_0000_0000_0000_1000; 5b11101 :d1,d0=32b0000_0000_0000_0000_0000_0000_0000_0100; 5b11110 :d1,d0=32b0000_0000_0000_0000_0000_0000_0000_0010; 5b11111 :d1,d0=32b0000_0000_0000_0000_0000_0000_0000_0001; default d1,d0=32bxxxx_xxxx_
9、xxxx_xxxx_xxxx_xxxx_xxxx_xxxx; endcase endendmodule五测试用例映射:d00:U16. .d015:LD15从左向右映射低位数段输入:1111输出:v16亮学生学号 0121410870432实验成绩学 生 实 验 报 告 书实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生 姓 名付天纯学生专业班级物联网14032015-2016学年第一学期数据选择器的设计与实现【实验要求】:(1) 理解数据选择器的工作原理,设计并实现2n选1的数据选择器,要求能够正确地根据输入的控制信号选择合适的输出。(2) 要求实现2
10、1选1的数据选择器、22选1 的数据选择器、24选1的数据选择器、25选1的数据选择器,2n选1的数据选择器。【实验目的】 (1)掌握数据选择器的工作原理;(2)掌握2n选1的数据选择器的实现。【实验环境】u Basys3 FPGA开发板,69套。u Vivado2014 集成开发环境。u Verilog编程语言。【实验步骤】一功能描述由五个拨码开关控制选择,十一个拨码开关控制输入内部定义二十一位数,输出由一个led灯显示。二真值表三 表达式四 函数module select_32_1( input 10:0 in_sgn, input 4:0 add_sgn, output out_sgn
11、); wire 20:0in_in_sgn; wire for_out_sgn; wire back_out_sgn; assign in_in_sgn=21b0000_0000_0000_0000_00000; select_16_1 sel16_1(.in_sgn(in_in_sgn3:0,in_sgn10:0),.add_sgn(add_sgn3:0),.out_sgn(for_out_sgn); select_16_1 sel16_2(.in_sgn(in_in_sgn20:4),.add_sgn(add_sgn3:0),.out_sgn(back_out_sgn); select_2
12、_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn4),.out_sgn(out_sgn);endmodulemodule select_16_1( input 11:0 in_sgn, input 3:0 add_sgn, output out_sgn ); wire 3:0in_in_sgn; wire for_out_sgn; wire back_out_sgn; assign in_in_sgn=4b0000; select_8_1 sel8_1(.in_sgn(in_sgn7:0),.add_
13、sgn(add_sgn2:0),.out_sgn(for_out_sgn); select_8_1 sel8_2(.in_sgn(in_in_sgn3:0,in_sgn11:8),.add_sgn(add_sgn2:0),.out_sgn(back_out_sgn); select_2_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn3),.out_sgn(out_sgn);endmodulemodule select_8_1( input 7:0 in_sgn, input 2:0 add_sgn,
14、output out_sgn ); wire for_out_sgn; wire back_out_sgn; select_4_1 sel4_1(.in_sgn(in_sgn3:0),.add_sgn(add_sgn1:0),.out_sgn(for_out_sgn); select_4_1 sel4_2(.in_sgn(in_sgn7:4),.add_sgn(add_sgn1:0),.out_sgn(back_out_sgn); select_2_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn2),
15、.out_sgn(out_sgn);endmodulemodule select_4_1( input 3:0 in_sgn, input 1:0 add_sgn, output out_sgn ); wire for_out_sgn; wire back_out_sgn; select_2_1 sel2_1(.in_sgn1(in_sgn0),.in_sgn2(in_sgn1),.add_sgn(add_sgn0),.out_sgn(for_out_sgn); select_2_1 sel2_2(.in_sgn1(in_sgn3),.in_sgn2(in_sgn2),.add_sgn(add
16、_sgn0),.out_sgn(back_out_sgn); select_2_1 sel2_3(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn1),.out_sgn(out_sgn);endmodulemodule select_2_1( input in_sgn1, input in_sgn2, input add_sgn, output out_sgn ); reg out_sgn; always(*) begin if(add_sgn=0) out_sgn=in_sgn1; else out_sgn=in_sg
17、n2; endendmodule四 电路图五 结果检验选择线从大到小对应从左到右的左边五个拨码开关,输入从大到小对应剩下从左到右十一个拨码开关。任意选led灯一个对应输出。只将最右边一个拨码开关打开,led灯亮。学生学号 0121410870432实验成绩学 生 实 验 报 告 书实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生 姓 名付天纯学生专业班级物联网14032015-2016学年第一学期ALU的设计与实现【实验要求】:(1) 理解全加器的工作原理,设计并实现1位,8位,32位全加器,能实现基本的加法运算。(2) 设计并实现1位,8位,32位补码
18、器,能够计算补码,从而实现加法和减法运算。【实验目的】 实现1位,8位,32位全加器;实现1位,8位,32位补码运算;实现1位,8位,32位的加减法器。【实验环境】u Basys3 FPGA开发板,69套。u Vivado2014 集成开发环境。u Verilog编程语言。【实验步骤】一功能描述输入两个八位二进制数,最高位代表符号位,0代表正1代表负,输出八位led灯,一个代表结果符号,八位代表加减后的结果。二 真值表 二表达式四 Verilog代码描述module bumaqi( input 6:0 value, Input sign,output 7:0 comp ); reg 7:0 c
19、omp; always (sign) if(sign=1) comp=sign,value6:0+1; Else comp=sign,value6:0;endmodulemodule fulladd_2( input a, input b, input x, output s, output c ); wire s1,c1,c2; xor xor1(s1,a,b); xor xor2(s,s1,x); and and1(c1,a,b); and and2(c2,s1,x); or or1(c,c1,c2);endmodulemodule fulljia( input 7:0 a, input
20、7:0 b, output 7:0 s, output c ); wire 6:0 c_mid; full2 fu1(.a(a0),.b(b0),.x(0),.c(c_mid0),.s(s0); full2 fu2(.a(a1),.b(b1),.x(c_mid0),.c(c_mid1),.s(s1); full2 fu3(.a(a2),.b(b2),.x(c_mid1),.c(c_mid2),.s(s2); full2 fu4(.a(a3),.b(b3),.x(c_mid2),.c(c_mid3),.s(s3); full2 fu5(.a(a4),.b(b4),.x(c_mid3),.c(c_
21、mid4),.s(s4); full2 fu6(.a(a5),.b(b5),.x(c_mid4),.c(c_mid5),.s(s5); full2 fu7(.a(a6),.b(b6),.x(c_mid5),.c(c_mid6),.s(s6); full2 fu8(.a(a7),.b(b7),.x(c_mid6),.c(c),.s(s7);endmodulemodule jiajian( input 7:0 a, input 7:0 b, output 7:0 c, output sign ); wire 7:0a_o; wire 7:0b_o; wire 7:0c_o; bumaqi bu1(
22、a6:0,a7,a_o7:0); bumaqi bu2(b6:0,b7,b_o7:0); fulljia fu(a_o7:0,b_o7:0,c_o7:0,sign); reg 7:0 c; always(c_o7)if(c_o7)c=c_o7,(c_o6:0-1); else c=c_o7:0;if(c_o7)sign=0;endmodule五电路图六结果检验输入a为2,b为3,led灯显示正5.输入a为2,b为负3,led灯显示负1.学生学号 0121410870432实验成绩学 生 实 验 报 告 书实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生
23、姓 名付天纯学生专业班级物联网14032015-2016学年第一学期计数器的设计与实现【实验要求】:(1) 利用D触发器设计并实现二进制计数器,要求实现216-1的计数;(2) 利用D触发器设计并实现十进制计数器(BCD码),要求实现105-1的计数;(3) 利用D触发器设计并实现3位纽环计数器。【实验目的】 1. 掌握二进制和十进制计数器的设计与实现;2. 掌握二进制和十进制计数器的集成;3. 掌握纽环计数器的实现。【实验环境】u Basys3 FPGA开发板,69套。u Vivado2014 集成开发环境。u Verilog编程语言。【实验原理】【实验步骤】包括:功能描述,真值表,逻辑方程
24、,电路图,Verilog代码实现(硬件映射代码),实验结果或者仿真结果1)二进制计数器022实现Q1nQ0nQ1n+1Q0n+1C00010011001011011001Q1n+1= Q1nQ0nC=Q1nQ0n2 十进制计数器(1)十进制计数器0-9Q3nQ2nQ1nQ0nQ3n+1Q2n+1Q1n+1Q0n+1C000000010001001000100011001101000100010101010110011001110111100010001001100100001Verilog代码实现module jishuqi_60(input clk,input rst,output reg
25、7:0q);second_clk second(clk,clk_1); wire 3:0m; wire c; reg 3:0 n=4b0000;jishuqi_10 jishuqi2(clk_1,rst,m,c);always(posedge clk_1)beginif(c=1)case(n) 4b0000: n=4b0001; 4b0001: n=4b0010; 4b0010: n=4b0011; 4b0011: n=4b0100; 4b0100: n=4b0101; 4b0101: n=4b0110; 4b0110: n=4b0111; 4b0111: n=4b1000; 4b1000:
26、n=4b1001;endcaseq=n3:0,m3:0;endendmodulemodule jishuqi_10(input clk_1,input rst,output reg 3:0q,output reg c);always(posedge clk_1 or posedge rst)beginif(rst=1)q=4b0000;case(q) 4b0000:q=4b0001; 4b0001: q=4b0010; 4b0010: q=4b0011; 4b0011: q=4b0100; 4b0100: q=4b0101; 4b0101: q=4b0110; 4b0110: q=4b0111
27、; 4b0111: q=4b1000; 4b1000: begin q=4b1001; c=1; end 4b1001:begin q=4b0000; c=0; end endcase endendmodulemodule second_clk(input clk,output reg second_clk);reg 27:0 count=0;parameter M=2;always(posedge clk)begin second_clk=0; count=count+1; if(count=M) second_clk=1; if(count=2*M) begin second_clk=0;
28、 count=0; endendendmodule结果仿真学生学号 0121410870432实验成绩学 生 实 验 报 告 书实验课程名称逻辑与计算机设计基础开 课 学 院计算机科学与技术学院指导教师姓名肖敏学 生 姓 名付天纯学生专业班级物联网14032015-2016学年第一学期计时器的设计与实现【实验要求】:根据计数器原理等设计并实现一个数字计时器,能够计秒、分、小时,在控制电路的作用下具有开机清零、复位清零等功能。并能够通过七段数码管显示时钟的秒和分。【实验目的】 4. 掌握一些特殊进制(60进制、24进制)计数器的设计与实现;5. 掌握由basys3提供的100MHZ系统主时钟生成
29、1HZ时钟的方法;6. 掌握数字计时器的实现方法:描述由1HZ的时钟驱动,秒钟60进1,分钟60进1,时针24进1;7. 掌握将计时器显示在七段数码管上。【实验环境】u Basys3 FPGA开发板,69套。u Vivado2014 集成开发环境。u Verilog编程语言。【实验原理】【实验步骤】实验思路:在上一次实验计数器的基础上进行以秒计数,再将一秒划分成两百份,让七段管以五十为刷新率刷新数据。Verilog代码实现module shi( input clk, input rst, output reg 3:0 an, output reg 6:0 b ); wire 6:0n;wire
30、 6:0m;wire 6:0p;wire 6:0q; wire c1,c2,c3,c4;wire clk_1,clk_2;reg rst_clk; jishuqi_3600 jishuqi1(clk,rst,q,c4); jishuqi_600 jishuqi1(clk,rst,p,c3); jishuqi_60 jishuqi1(clk,rst,n,c2); jishuqi_10 jishuqi2(clk,rst,m,c1); third_clk third2(clk,clk_2); always(posedge clk_2 or posedge rst) begin rst_clk=rst
31、; if(rst_clk)an=4b0111; case(an) 4b0111:begin an=4b1110;b=m; end 4b1110:begin an=4b1101;b=n;end 4b1101:begin an=4b1011;b=p; end 4b1011:begin an=4b0111;b=q; end endcase end endmodulemodule jishuqi_3600(input clk,input rst,output reg 6:0q,output reg c);second_clk second(clk,clk_1); wire 6:0m; wire c1;
32、 jishuqi_600 jishuqi4(clk,rst,m,c1);always(posedge clk_1 or posedge rst)beginbeginif(rst=1)q=7b0000_001;endif(c1=1)case(q) 7b0000_001: q=7b1001_111; 7b1001_111: q=7b0010_010; 7b0010_010: q=7b0000_110; 7b0000_110: q=7b1001_100; 7b1001_100: q=7b0100_100; 7b0100_100: begin q=7b0100_000; c=1; end 7b0100
33、_000: begin q=7b0000_001; c=0; endendcaseendendmodulemodule jishuqi_600(input clk,input rst,output reg 6:0q,output reg c);second_clk second(clk,clk_1); wire 6:0m; wire c1; jishuqi_60 jishuqi3(clk,rst,m,c1);always(posedge clk_1 or posedge rst)beginbeginif(rst=1)q=7b0000_001;endif(c1=1)case(q) 7b0000_
34、001: q=7b1001_111; 7b1001_111: q=7b0010_010; 7b0010_010: q=7b0000_110; 7b0000_110: q=7b1001_100; 7b1001_100: q=7b0100_100; 7b0100_100: q=7b1000_000; 7b1000_000: q=7b0001_111; 7b0001_111: q=7b0000_000; 7b0000_000: begin q=7b0001_100; c=1; end 7b0001_100: begin q=7b0000_001; c=0; endendcaseendendmodul
35、emodule jishuqi_60(input clk,input rst,output reg 6:0q,output reg c);second_clk second(clk,clk_1); wire 6:0m; wire c1; jishuqi_10 jishuqi2(clk,rst,m,c1);always(posedge clk_1 or posedge rst )beginbeginif(rst=1)q=7b0000_001;endif(c1=1)case(q) 7b0000_001: q=7b1001_111; 7b1001_111: q=7b0010_010; 7b0010_
36、010: q=7b0000_110; 7b0000_110: q=7b1001_100; 7b1001_100: q=7b0100_100; 7b0100_100: begin q=7b0100_000; c=1; end 7b0100_000: begin q=7b0000_001; c=0; endendcaseendendmodulemodule jishuqi_10(input clk,input rst,output reg 6:0q,output reg c);second_clk second(clk,clk_1);always(posedge clk_1 or posedge
37、rst)beginif(rst=1)q=7b0000_001;case(q) 7b0000_001: q=7b1001_111; 7b1001_111: q=7b0010_010; 7b0010_010: q=7b0000_110; 7b0000_110: q=7b1001_100; 7b1001_100: q=7b0100_100; 7b0100_100: q=7b0100_000; 7b0100_000: q=7b0001_111; 7b0001_111: q=7b0000_000; 7b0000_000: begin q=7b0001_100; c=1; end 7b0001_100:
38、begin q=7b0000_001; c=0; end endcase endendmodulemodule second_clk(input clk,output reg second_clk);reg 27:0 count=0;parameter M=4;always(posedge clk)begin second_clk=0; count=count+1; if(count=M) second_clk=1; if(count=2*M) begin second_clk=0; count=0; endendendmodulemodule third_clk(input clk,output reg second_clk);reg 27:0 count=0;parameter M=50000000;always(posedge clk)begin second_clk=0; count=count+1; if(count=M) second_clk=1; if(count=2*M) begin second_clk=0; count=0; endendendmodule仿真代码module test_shi();reg clk,rst;wire 3:0a;wi