收藏 分销(赏)

逻辑与计算机设计基础课实验报告大学论文.doc

上传人:天**** 文档编号:4599675 上传时间:2024-10-03 格式:DOC 页数:39 大小:2.17MB
下载 相关 举报
逻辑与计算机设计基础课实验报告大学论文.doc_第1页
第1页 / 共39页
逻辑与计算机设计基础课实验报告大学论文.doc_第2页
第2页 / 共39页
点击查看更多>>
资源描述
学生学号 0121410870432 实验成绩 学 生 实 验 报 告 书 实验课程名称 逻辑与计算机设计基础 开 课 学 院 计算机科学与技术学院 指导教师姓名 肖敏 学 生 姓 名 付天纯 学生专业班级 物联网1403 2015 -- 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 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) 5'b00000 :{d1,d0}=32'b1000_0000_0000_0000_0000_0000_0000_0000; 5'b00001 :{d1,d0}=32'b0100_0000_0000_0000_0000_0000_0000_0000; 5'b00010 :{d1,d0}=32'b0010_0000_0000_0000_0000_0000_0000_0000; 5'b00011 :{d1,d0}=32'b0001_0000_0000_0000_0000_0000_0000_0000; 5'b00100 :{d1,d0}=32'b0000_1000_0000_0000_0000_0000_0000_0000; 5'b00101 :{d1,d0}=32'b0000_0100_0000_0000_0000_0000_0000_0000; 5'b00110 :{d1,d0}=32'b0000_0010_0000_0000_0000_0000_0000_0000; 5'b00111 :{d1,d0}=32'b0000_0001_0000_0000_0000_0000_0000_0000; 5'b01000 :{d1,d0}=32'b0000_0000_1000_0000_0000_0000_0000_0000; 5'b01001 :{d1,d0}=32'b0000_0000_0100_0000_0000_0000_0000_0000; 5'b01010 :{d1,d0}=32'b0000_0000_0010_0000_0000_0000_0000_0000; 5'b01011 :{d1,d0}=32'b0000_0000_0001_0000_0000_0000_0000_0000; 5'b01100 :{d1,d0}=32'b0000_0000_0000_1000_0000_0000_0000_0000; 5'b01101 :{d1,d0}=32'b0000_0000_0000_0100_0000_0000_0000_0000; 5'b01110 :{d1,d0}=32'b0000_0000_0000_0010_0000_0000_0000_0000; 5'b01111 :{d1,d0}=32'b0000_0000_0000_0001_0000_0000_0000_0000; 5'b10000 :{d1,d0}=32'b0000_0000_0000_0000_1000_0000_0000_0000; 5'b10001 :{d1,d0}=32'b0000_0000_0000_0000_0100_0000_0000_0000; 5'b10010 :{d1,d0}=32'b0000_0000_0000_0000_0010_0000_0000_0000; 5'b10011 :{d1,d0}=32'b0000_0000_0000_0000_0001_0000_0000_0000; 5'b10100 :{d1,d0}=32'b0000_0000_0000_0000_0000_1000_0000_0000; 5'b10101 :{d1,d0}=32'b0000_0000_0000_0000_0000_0100_0000_0000; 5'b10110 :{d1,d0}=32'b0000_0000_0000_0000_0000_0010_0000_0000; 5'b10111 :{d1,d0}=32'b0000_0000_0000_0000_0000_0001_0000_0000; 5'b11000 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_1000_0000; 5'b11001 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0100_0000; 5'b11010 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0010_0000; 5'b11011 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0001_0000; 5'b11100 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0000_1000; 5'b11101 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0000_0100; 5'b11110 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0000_0010; 5'b11111 :{d1,d0}=32'b0000_0000_0000_0000_0000_0000_0000_0001; default {d1,d0}=32'bxxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx_xxxx; endcase end endmodule 五·测试用例 映射:d0[0]:U16... ...d0[15]:LD15从左向右映射低位数段 输入:1111 输出:v16亮 学生学号 0121410870432 实验成绩 学 生 实 验 报 告 书 实验课程名称 逻辑与计算机设计基础 开 课 学 院 计算机科学与技术学院 指导教师姓名 肖敏 学 生 姓 名 付天纯 学生专业班级 物联网1403 2015 -- 2016 学年 第 一 学期 数据选择器的设计与实现 【实验要求】: (1) 理解数据选择器的工作原理,设计并实现2n选1的数据选择器,要求能够正确地根据输入的控制信号选择合适的输出。 (2) 要求实现21选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 ); wire [20:0]in_in_sgn; wire for_out_sgn; wire back_out_sgn; assign in_in_sgn=21'b0000_0000_0000_0000_00000; select_16_1 sel16_1(.in_sgn({in_in_sgn[3:0],in_sgn[10:0]}),.add_sgn(add_sgn[3:0]),.out_sgn(for_out_sgn)); select_16_1 sel16_2(.in_sgn(in_in_sgn[20:4]),.add_sgn(add_sgn[3:0]),.out_sgn(back_out_sgn)); select_2_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn[4]),.out_sgn(out_sgn)); endmodule module select_16_1( input [11:0] in_sgn, input [3:0] add_sgn, output out_sgn ); wire [3:0]in_in_sgn; wire for_out_sgn; wire back_out_sgn; assign in_in_sgn=4'b0000; select_8_1 sel8_1(.in_sgn(in_sgn[7:0]),.add_sgn(add_sgn[2:0]),.out_sgn(for_out_sgn)); select_8_1 sel8_2(.in_sgn({in_in_sgn[3:0],in_sgn[11:8]}),.add_sgn(add_sgn[2:0]),.out_sgn(back_out_sgn)); select_2_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn[3]),.out_sgn(out_sgn)); endmodule module select_8_1( input [7:0] in_sgn, input [2:0] add_sgn, output out_sgn ); wire for_out_sgn; wire back_out_sgn; select_4_1 sel4_1(.in_sgn(in_sgn[3:0]),.add_sgn(add_sgn[1:0]),.out_sgn(for_out_sgn)); select_4_1 sel4_2(.in_sgn(in_sgn[7:4]),.add_sgn(add_sgn[1:0]),.out_sgn(back_out_sgn)); select_2_1 sel2_1(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn[2]),.out_sgn(out_sgn)); endmodule module 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_sgn[0]),.in_sgn2(in_sgn[1]),.add_sgn(add_sgn[0]),.out_sgn(for_out_sgn)); select_2_1 sel2_2(.in_sgn1(in_sgn[3]),.in_sgn2(in_sgn[2]),.add_sgn(add_sgn[0]),.out_sgn(back_out_sgn)); select_2_1 sel2_3(.in_sgn1(for_out_sgn),.in_sgn2(back_out_sgn),.add_sgn(add_sgn[1]),.out_sgn(out_sgn)); endmodule module 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_sgn2; end endmodule 四. 电路图 五. 结果检验 选择线从大到小对应从左到右的左边五个拨码开关,输入从大到小对应剩下从左到右十一个拨码开关。任意选led灯一个对应输出。 只将最右边一个拨码开关打开,led灯亮。 学生学号 0121410870432 实验成绩 学 生 实 验 报 告 书 实验课程名称 逻辑与计算机设计基础 开 课 学 院 计算机科学与技术学院 指导教师姓名 肖敏 学 生 姓 名 付天纯 学生专业班级 物联网1403 2015 -- 2016 学年 第 一 学期 ALU的设计与实现 【实验要求】: (1) 理解全加器的工作原理,设计并实现1位,8位,32位全加器,能实现基本的加法运算。 (2) 设计并实现1位,8位,32位补码器,能够计算补码,从而实现加法和减法运算。 【实验目的】 实现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] comp; always @(sign) if(sign==1) comp={sign,~value[6:0]+1}; Else comp={sign,value[6:0]}; endmodule module 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); endmodule module fulljia( input [7:0] a, input [7:0] b, output [7:0] s, output c ); wire [6:0] c_mid; full2 fu1(.a(a[0]),.b(b[0]),.x(0),.c(c_mid[0]),.s(s[0])); full2 fu2(.a(a[1]),.b(b[1]),.x(c_mid[0]),.c(c_mid[1]),.s(s[1])); full2 fu3(.a(a[2]),.b(b[2]),.x(c_mid[1]),.c(c_mid[2]),.s(s[2])); full2 fu4(.a(a[3]),.b(b[3]),.x(c_mid[2]),.c(c_mid[3]),.s(s[3])); full2 fu5(.a(a[4]),.b(b[4]),.x(c_mid[3]),.c(c_mid[4]),.s(s[4])); full2 fu6(.a(a[5]),.b(b[5]),.x(c_mid[4]),.c(c_mid[5]),.s(s[5])); full2 fu7(.a(a[6]),.b(b[6]),.x(c_mid[5]),.c(c_mid[6]),.s(s[6])); full2 fu8(.a(a[7]),.b(b[7]),.x(c_mid[6]),.c(c),.s(s[7])); endmodule module jiajian( input [7:0] a, input [7:0] b, output [7:0] c, output sign ); wire [7:0]a_o; wire [7:0]b_o; wire [7:0]c_o; bumaqi bu1(a[6:0],a[7],a_o[7:0]); bumaqi bu2(b[6:0],b[7],b_o[7:0]); fulljia fu(a_o[7:0],b_o[7:0],c_o[7:0],sign); reg [7:0] c; always@(c_o[7]) if(c_o[7]) c={c_o[7],~(c_o[6:0]-1)}; else c=c_o[7:0]; if(c_o[7]) sign=0; endmodule 五.电路图 六.结果检验 输入a为2,b为3,led灯显示正5. 输入a为2,b为负3,led灯显示负1. 学生学号 0121410870432 实验成绩 学 生 实 验 报 告 书 实验课程名称 逻辑与计算机设计基础 开 课 学 院 计算机科学与技术学院 指导教师姓名 肖敏 学 生 姓 名 付天纯 学生专业班级 物联网1403 2015 -- 2016 学年 第 一 学期 计数器的设计与实现 【实验要求】: (1) 利用D触发器设计并实现二进制计数器,要求实现216-1的计数; (2) 利用D触发器设计并实现十进制计数器(BCD码),要求实现105-1的计数; (3) 利用D触发器设计并实现3位纽环计数器。 【实验目的】 1. 掌握二进制和十进制计数器的设计与实现; 2. 掌握二进制和十进制计数器的集成; 3. 掌握纽环计数器的实现。 【实验环境】 u Basys3 FPGA开发板,69套。 u Vivado2014 集成开发环境。 u Verilog编程语言。 【实验原理】 【实验步骤】包括:功能描述,真值表,逻辑方程,电路图,Verilog代码实现(硬件映射代码),实验结果或者仿真结果 1)二进制计数器0~22实现 Q1n Q0n Q1n+1 Q0n+1 C 0 0 0 1 0 0 1 1 0 0 1 0 1 1 0 1 1 0 0 1 Q1n+1= Q1nQ0n C=Q1nQ0n 2 十进制计数器 (1)十进制计数器0-9 Q3n Q2n Q1n Q0n Q3n+1 Q2n+1 Q1n+1 Q0n+1 C 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 1 Verilog代码实现 module jishuqi_60( input clk, input rst, output reg [7:0]q ); second_clk second(clk,clk_1); wire [3:0]m; wire c; reg [3:0] n=4'b0000; jishuqi_10 jishuqi2(clk_1,rst,m,c); always@(posedge clk_1) begin if(c==1)case(n) 4'b0000: n<=4'b0001; 4'b0001: n<=4'b0010; 4'b0010: n<=4'b0011; 4'b0011: n<=4'b0100; 4'b0100: n<=4'b0101; 4'b0101: n<=4'b0110; 4'b0110: n<=4'b0111; 4'b0111: n<=4'b1000; 4'b1000: n<=4'b1001; endcase q<={n[3:0],m[3:0]}; end endmodule module jishuqi_10( input clk_1, input rst, output reg [3:0]q, output reg c ); always@(posedge clk_1 or posedge rst) begin if(rst==1)q<=4'b0000; case(q) 4'b0000:q<=4'b0001; 4'b0001: q<=4'b0010; 4'b0010: q<=4'b0011; 4'b0011: q<=4'b0100; 4'b0100: q<=4'b0101; 4'b0101: q<=4'b0110; 4'b0110: q<=4'b0111; 4'b0111: q<=4'b1000; 4'b1000: begin q<=4'b1001; c<=1; end 4'b1001:begin q<=4'b0000; c<=0; end endcase end endmodule module 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; count<=0; end end endmodule 结果仿真 学生学号 0121410870432 实验成绩 学 生 实 验 报 告 书 实验课程名称 逻辑与计算机设计基础 开 课 学 院 计算机科学与技术学院 指导教师姓名 肖敏 学 生 姓 名 付天纯 学生专业班级 物联网1403 2015 -- 2016 学年 第 一 学期 计时器的设计与实现 【实验要求】: 根据计数器原理等设计并实现一个数字计时器,能够计秒、分、小时,在控制电路的作用下具有开机清零、复位清零等功能。并能够通过七段数码管显示时钟的秒和分。 【实验目的】 4. 掌握一些特殊进制(60进制、24进制)计数器的设计与实现; 5. 掌握由basys3提供的100MHZ系统主时钟生成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:0]n; wire [6:0]m; wire [6:0]p; wire [6:0]q; 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; if(rst_clk)an<=4'b0111; case(an) 4'b0111:begin an<=4'b1110;b<=m; end 4'b1110:begin an<=4'b1101;b<=n;end 4'b1101:begin an<=4'b1011;b<=p; end 4'b1011:begin an<=4'b0111;b<=q; end endcase end endmodule module jishuqi_3600( input clk, input rst, output reg [6:0]q, output reg c ); second_clk second(clk,clk_1); wire [6:0]m; wire c1; jishuqi_600 jishuqi4(clk,rst,m,c1); always@(posedge clk_1 or posedge rst) begin begin if(rst==1)q<=7'b0000_001; end if(c1==1) case(q) 7'b0000_001: q<=7'b1001_111; 7'b1001_111: q<=7'b0010_010; 7'b0010_010: q<=7'b0000_110; 7'b0000_110: q<=7'b1001_100; 7'b1001_100: q<=7'b0100_100; 7'b0100_100: begin q<=7'b0100_000; c<=1; end 7'b0100_000: begin q<=7'b0000_001; c<=0; end endcase end endmodule module jishuqi_600( input clk, input rst, output reg [6:0]q, output reg c ); second_clk second(clk,clk_1); wire [6:0]m; wire c1; jishuqi_60 jishuqi3(clk,rst,m,c1); always@(posedge clk_1 or posedge rst) begin begin if(rst==1)q<=7'b0000_001; end if(c1==1) case(q) 7'b0000_001: q<=7'b1001_111; 7'b1001_111: q<=7'b0010_010; 7'b0010_010: q<=7'b0000_110; 7'b0000_110: q<=7'b1001_100; 7'b1001_100: q<=7'b0100_100; 7'b0100_100: q<=7'b1000_000; 7'b1000_000: q<=7'b0001_111; 7'b0001_111: q<=7'b0000_000; 7'b0000_000: begin q<=7'b0001_100; c<=1; end 7'b0001_100: begin q<=7'b0000_001; c<=0; end endcase end endmodule module jishuqi_60( input clk, input rst, output reg [6:0]q, output reg c ); second_clk second(clk,clk_1); wire [6:0]m; wire c1; jishuqi_10 jishuqi2(clk,rst,m,c1); always@(posedge clk_1 or posedge rst ) begin begin if(rst==1)q<=7'b0000_001; end if(c1==1) case(q) 7'b0000_001: q<=7'b1001_111; 7'b1001_111: q<=7'b0010_010; 7'b0010_010: q<=7'b0000_110; 7'b0000_110: q<=7'b1001_100; 7'b1001_100: q<=7'b0100_100; 7'b0100_100: begin q<=7'b0100_000; c<=1; end 7'b0100_000: begin q<=7'b0000_001; c<=0; end endcase end endmodule module jishuqi_10( input clk, input rst, output reg [6:0]q, output reg c ); second_clk second(clk,clk_1); always@(posedge clk_1 or posedge rst) begin if(rst==1)q<=7'b0000_001; case(q) 7'b0000_001: q<=7'b1001_111; 7'b1001_111: q<=7'b0010_010; 7'b0010_010: q<=7'b0000_110; 7'b0000_110: q<=7'b1001_100; 7'b1001_100: q<=7'b0100_100; 7'b0100_100: q<=7'b0100_000; 7'b0100_000: q<=7'b0001_111; 7'b0001_111: q<=7'b0000_000; 7'b0000_000: begin q<=7'b0001_100; c<=1; end 7'b0001_100: begin q<=7'b0000_001; c<=0; end endcase end endmodule module 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; end end endmodule module 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; end end endmodule 仿真代码 module test_shi(); reg clk,rst; wire [3:0]a; wi
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服