基于DE2-115开发板的FPGA入门设计实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于DE2-115开发板的FPGA入门设计实验

1、Lab1: 4位加法器、减法器的设计

1.1 摘要

在文件add_sub里面的工程文件operation_4.v为顶层文件,该顶层文件包含了三个子模块,分别为数码管显示模块,4位带进位的二进制加法器模块和4位带借位的二进制减法器模块,最后通过DE2-115开发板显示实验结果。

1.2 程序

1)add_4bits.v 加法器

module adder_4bits

(

input clk,

input rst_n,

input [3:0] x,

input [3:0] y,

output reg [3:0] sum,

output reg carry_out //溢出位

);

always@(posedge clk or negedge rst_n)

begin

if(!rst_n)

{carry_out, sum} <= 0;

else

{carry_out, sum} = x + y;

end

endmodule

2)substractor_4bits.v减法器module subtractor_4bits

(

input clk,

input rst_n,

input [3:0] x,

input [3:0] y,

output r eg [3:0] sub,

output r eg borrow_out

);

always@(posedge clk or negedge rst_n) begin

if(!rst_n)

{borrow_out, sub} <= 0;

else

begin

if(x >= y)

{borrow_out, sub} = {1'b0, x - y};

else

{borrow_out, sub} = {1'b1, x - y};

end

end

endmodule

3)seg7_lut.v 数码管显示译码模块

module Seg7_lut

(

input [3:0] iDIG,

output r eg [6:0] oSEG

);

always @(iDIG)

begin

case(iDIG)

4'h1: oSEG = 7'b1111001; // ---t----

4'h2: oSEG = 7'b0100100; // | |

4'h3: oSEG = 7'b0110000; // lt rt

4'h4: oSEG = 7'b0011001; // | |

4'h5: oSEG = 7'b0010010; // ---m----

4'h6: oSEG = 7'b0000010; // | |

4'h7: oSEG = 7'b1111000; // lb rb

4'h8: oSEG = 7'b0000000; // | |

4'h9: oSEG = 7'b0011000; // ---b----

4'ha: oSEG = 7'b0001000;

4'hb: oSEG = 7'b0000011;

4'hc: oSEG = 7'b1000110;

4'hd: oSEG = 7'b0100001;

4'he: oSEG = 7'b0000110;

4'hf: oSEG = 7'b0001110;

4'h0: oSEG = 7'b1000000;

endcase

end

endmodule

1.3 结果

本设计通过Verilog HDL硬件描述语言。描述加法、减法算法,包括了进位以及借位,最终可以在实验板上观察结果,验证了算法的正确性。拨码开关SW[7:0]输入两位计算值,SW[17]为复位按键,如下图所示:

该实验结果显示的是7+b=02,进位位在LEDG[0]显示,

7-b=12,借位位在LEDR[0]显示。计算过程如下:

2、Lab2: 三位二进制乘法器的设计

2.1 摘要

在文件mult_3bits里面的工程文件operation_4.v为顶层文件,该顶层文件包含了两个子模块,分别为数码管显示模块和三位二进制乘法器模块,最后通过DE2-115开发板显示实验结果。

2.2 程序

1)mult_3bits.v 乘法器

module mult_3bits

(

input [2:0] x,

input [2:0] y,

output [5:0] mult_out

);

wire [2:0] temp0 = y[0] ? x : 3'd0;

wire [2:0] temp1 = y[1] ? x : 3'd0;

wire [2:0] temp2 = y[2] ? x : 3'd0;

assign mult_out = temp0 + (temp1 << 1) + (temp2 << 2); endmodule

2)seg7_lut.v文件与Lab1中的相同

2.3 结果

本设计通过Verilog HDL硬件描述语言,通过移位以及

相关文档
最新文档