Verilog 实验报告

时间:2024.4.20

实验一 简单组合逻辑电路的设计

实验要求

1.   用verilog HDL语言描写出简单的一位数据比较器及其测试程序;

2.   用测试程序对比较器进行波形仿真测试;画出仿真波形;

3.   总结实验步骤和实验结果。

二 实验原理与内容

4.   这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。

5.   模块源代码

CIR$~Z)JJ{M4L1E{FO7326O

测试模块:

Y_]883GK0(9{6E75(]PGDIX 

6.         波形图:

   

  结实验步骤和实验结果

由图可看出,每当输入的电位值不同时输出为0,这与实验要求一致,相同时输出为1,故此程序是可行的。

实验三   verilog HDL中使用函数

实验要求

1.  掌握函数在模块中的使用

2.  用测试程序进行波形仿真测试;画出仿真波形

3. 总结实验步骤和实验结果                                        

二 实验原理与内容

   与一般的程序设计语言一样;verilog HDL也可以使用函数已是应对不同变量采取同一运算的操作。verilog HDL函数在综合时被理解成具有独立运算功能的电路,每调用一次函数相当于改变这部分电路的输入以得到相应的计算结果。

模块源代码:

module ex3(clk,n,result,reset);

    output[31:0] result;

    input[3:0] n;

    input reset,clk;

    reg[31:0] result;

    always @(posedge clk)

    begin

        if(!reset)result <= 0;

        else

        begin

           result <= n*factorial(n)/((n*2)+1);

        end

    end

function[31:0] factorial;

    input[3:0] operand;

    reg[3:0] index;

    begin

        factorial = operand ? 1:0;

        for(index = 2;index <= operand;index = index+1)

        factorial = index*factorial;

    end

endfunction

endmodule

`timescale 1ns/100ps

`define clk_cycle 50

module ex3_t();

    reg[3:0] n,i;

    reg reset,clk;

    wire[31:0] result;

    initial

    begin

       n=0;

       reset=1;

       clk=0;

       #100 reset=0;

       #100 reset = 1;

       for(i=0;i <= 15;i=i+1)

       begin

          #200 n=i;

       end

       #100 $stop;

      

    end

    always #`clk_cycle clk =~ clk;

    ex3 ex30(.clk(clk),.n(n),.result(result),.reset(reset));

    always @(negedge clk)

    $display("at n=%d,result=%d",n,result);

endmodule

波形图

       

实验四    verilog HDL中使用任务

实验要求

1.  掌握任务在结构化verilog HDL设计中的应用

2.  用测试程序进行波形仿真测试;画出仿真波形

3.  总结实验步骤和实验结果

二 实验原理与内容

   仅有函数并不能满足verilog HDL中的运算需求。当我们希望能够将一些信号进行运算并输出多个结果时,采用函数结构就显得非常不方便,而任务结构在这方面的优势十分的突出。任务本身并不返回计算值,但是它通过类似C语言中形参与实参的数据交换,非常快捷的实现运算结果的调用。

 模块源代码:

    output[3:0] ra,rb,rc,rd;

    input[3:0] a,b,c,d;

   

    reg[3:0] ra,rb,rc,rd;

    reg[3:0] va,vb,vc,vd;

    always @(a or b or c or d)

    begin

       {va,vb,vc,vd} = {a,b,c,d};

       sort2(va,vc);

       sort2(vb,vd);

       sort2(va,vb);

       sort2(vc,vd);

       sort2(vb,vc);

       {ra,rb,rc,rd} = {va,vb,vc,vd};

    end

 task sort2;

        inout[3:0] x,y;

        reg[3:0] tmp;

        if(x>y)

        begin

           tmp=x;

           x=y;

           y=tmp;

        end

endtask

endmodule

测试程序代码

`timescale 1ns/100ps

module task_Top;

reg [3:0] a,b,c,d;

wire[3:0] ra,rb,rc,rd;

initial

begin

    a=0;

    b=0;

    c=0;

    d=0;

    repeat(5)

    begin

        #100 a=$random;

             b=$random;

             c=$random;

             d=$random;

         end

         #100 $stop;

     end

     sort4 sort4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd));

 endmodule

波形图 : 

 


  结实验步骤和实验结果

a、b、c、d赋以0101,0100,0011,0010,显示结果应为:ra=0010,rb=0011,rc=0100,rd=0101,结果与理论数据相符。

实验六  8位全加器的设计

实验要求

1.  GW48实验箱

2.  用原理图输入方式设计8位全加器,并进行编译、仿真、下载;

3.  总结实验步骤和实验结果

模块源代码

二 实验原理与内容

1.  加法器是数学系统中的基本逻辑器件,加法器和硬件乘法器都可由加法起来构成。多位加法器的构成有两种:并行进位和窜行进位。

2.  万成位全加器ADDER4B的设计,并将此全加器电路设计成一个硬件符号入库。建立一个更高的原理图设计层,可命名为ADDER8B.

模块源代码:

1、  了解一位全加器的设计与编程,设计一个四位二进制的全加器,其编程如下:

module HA(A,B,CIN,S,COUT);

output[3:0]S;

output COUT;

input[3:0] A,B;

input  CIN;

assign{COUT,S}=A+B+CIN;

endmodule

2、  用两个四位二进制的全加器级联构成八位二进制的全加器,其编程如下:

module Adder8Bit(a,b,cin,sum,cout);

input[7:0]a,b;

input cin;

output[7:0]sum;

output cout;

wire c;

HA p0(a[3:0],b[3:0],cin,sum[3:0],c);

HA p1(a[7:4],b[7:4],c,sum[7:4],cout);

endmodule

波形图

图1

图2

  结实验步骤和实验结果

   利用4位全加器级联成8位全加器,由图1可明显的看出此程序实现了全加器的功能;由图2又可以知道此程序是8位相加的,故它实现了8位全加器的功能。


第二篇:Verilog HDL 实验报告


Verilog实验报告

班级:

学号:

姓名:

- 1 -

实验1 :用 Verilog HDL 程序实现直通线

1 实验要求:

(1) 编写一位直通线的 Veirlog HDL 程序.

(2) 编写配套的测试基准.

(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.

(4) 建议用模式 5

2 试验程序:

module wl(in,out);

input in;

output out;

wire out;

assign out=in;

endmodule

3 测试基准:

`include “wl.v”

module wl_tb;

reg in_tb;

wire out_tb;

initial

begin

in_tb =0;

#100 in_tb =1;

#130 in_tb =0;

end

endmodule

4 仿真图形:

VerilogHDL实验报告

- 2 -

实验2 :用 Verilog HDL 程序实现一位四选一多路选择器

1实验要求:

(1) 编写一位四选一多路选择器的 Veirlog HDL 程序.

(2) 编写配套的测试基准.

(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.

(4) 建议用模式 5

2 试验程序:

module mux4_to_1 (out,i0,i1,i2,i3,s1,s0);

output out;

input i0,i1,i2,i3;

input s1, s0;

reg out;

always @ (s1 or s0 or i0 or i1 or i2 or i3)

begin

case ({s1, s0})

2'b00: out=i0;

2'b01: out=i1;

2'b10: out=i2;

2'b11: out=i3;

default: out=1'bx;

endcase

end

endmodule

3 测试基准:

`include "mux4_to_1.v"

module mux4_to_1_tb1;

reg ain,bin,cin,din;

reg[1:0] select;

reg clock;

wire outw;

initial

begin

ain=0;

bin=0;

cin=0;

din=0;

select=2'b00;

clock=0;

end

always #50 clock=~clock;

always @(posedge clock)

begin

#1 ain={$random} %2;

- 3 -

#3 bin={$random} %2;

#5 cin={$random} %2;

#7 din={$random} %2;

end

always #1000 select[0]=!select[0];

always #2000 select[1]=!select[1];

mux4_to_1 m(.out(outw),.i0(ain),.i1(bin),.i2(cin),.i3(din),.s1(select[1]),.s0(select[0]));

endmodule

4 仿真图形:

VerilogHDL实验报告

实验3:用 Verilog HDL 程序实现十进制计数器

1实验要求:

(1) 编写十进制计数器的 Veirlog HDL 程序. 有清零端与进位端, 进位端出在输出为 9 时为高电平.

(2) 编写配套的测试基准.

(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.

(4) 自行选择合适的模式

2 实验程序:

module counter_10c (Q, clock, clear, ov);

output [3:0] Q;

output ov;

input clock, clear;

reg [3:0] Q;

reg ov;

initial Q=4'b0000;

always @ (posedge clear or negedge clock)

begin

if (clear)

Q<=4'b0;

else if (Q==8)

begin

- 4 -

Q<=Q+1;

ov<=1'b1;

end

else if (Q==9)

begin

Q<=4'b0000;

ov<=1'b0;

end

else

begin

Q<=Q+1;

ov<=1'b0;

end

end

endmodule

3 测试基准:

`include"./counter_10c.v"

module counter_10c_tb;

wire[3:0] D_out;

reg clk,clr;

wire c_out;

reg[3:0] temp;

initial

begin

clk=0;

clr=0;

#100 clr=1;

#20 clr=0;

end

always #20 clk=~clk;

counter_10c m_1(.Q(D_out),.clear(clr),.clock(clk),.ov(c_out)); endmodule

4 仿真波形:

- 5 -

实验4 :用 Verilog HDL 程序实现序列检测器

1 实验要求:、

(1) 编写序列检测器的 Veirlog HDL 程序. 检测串行输入的数据序列中是否有目标序列 5'b10010, 检测到指定序列后, 用一个端口输出高电平表示.

(2) 编写配套的测试基准.

(3) 通过 QuartusII 编译下载到目标 FPGA器件中进行验证.

(4) 自行选择合适的模式

2试验程序:

module e15d1_seqdet( x, z, clk, rst);

input x,clk, rst;

output z;

reg [2:0] state;

wire z;

parameter IDLE = 3 'd0,

A = 3'd1,

B = 3'd2,

C = 3'd3,

D = 3'd4,

E = 3'd5,

F = 3'd6,

G = 3'd7;

assign z =(state==D && x==0)?1:0;

always @(posedge clk or negedge rst)

if(!rst)

begin

state<=IDLE;

end

else

casex(state)

- 6 -

VerilogHDL实验报告

IDLE: if(x==1)

state<=A;

else state<=IDLE; A: if (x==0)

state<=B;

else state<=A;

B: if (x==0)

state<=C;

else state<=F;

C: if(x==1)

state<=D;

else state<=G;

D: if(x==0) state<=E;

else state<=A;

E: if(x==0)

state<=C;

else state<=A;

F: if(x==1)

state<=A;

else state<=B;

G: if(x==1)

state<=F;

else state <=G;

default: state<=IDLE;

endcase

endmodule

3 测试基准:

`include"e15d1_seqdet.v"

`timescale 1ns/1ns

`define halfperiod 20

module e15d1_seqdet_tb;

reg clk, rst;

reg [23:0] data;

wire z;

reg x;

initial

begin

clk =0;

rst =1;

#2 rst =0;

#30 rst =1;

data= 20 'b1100_1001_0000_1001_0100; - 7 -

#(`halfperiod*1000) $stop;

end

always #(`halfperiod) clk=~clk;

always @ (posedge clk)

begin

#2 data={data[22:0],data[23]};

x=data[23];

end

e15d1_seqdet m(.x(x),.z(z),.clk(clk),.rst(rst));

endmodule

4 仿真波形:

VerilogHDL实验报告

- 8 -

更多相关推荐:
Verilog实验报告(电子)

西安邮电大学VerilogHDL大作业报告书学院名称学生姓名专业名称班级电子工程学院电子信息工程实验一异或门设计一实验目的1熟悉Modelsim软件2掌握Modelsim软件的编译仿真方法3熟练运用Models...

北航verilog实验报告

北京航空航天大学电子电路设计数字部分实验报告实验一简单组合逻辑设计2实验二简单分频时序逻辑电路的设计3一实验目的1掌握最基本组合逻辑电路的实现方法32学习时序电路测试模块的编写33学习综合和不同层次的仿真3实验...

Verilog实验报告

实验报告格式要求一实验报告内容包括1实验名称2实验目的3实验仪器及编号写明仪器名称型号编号4实验原理简单叙述有关实验原理包括电路图或光路图或实验装置示意图及测量中依据的的公式式中各量的物理含义及单位公式成立所应...

Verilog HDL 实验报告

实验一Modelsim仿真软件的使用一实验目的1熟悉Modelsim软件2掌握Modelsim软件的编译仿真方法3熟练运用Modelsim软件进行HDL程序设计开发二实验内容1实验要求用VerilogHDL程序...

数字系统设计与Verilog HDL实验报告(一)

数字系统设计与VerilogHDL实验报告一班级自动1003班姓名刘洋学号06101103实验一ModelSim认识及四位比较器一实验目的1了解及掌握ModelSim2通过软件的基本功能ModelSim软件编写...

verilog hdl电子时钟实验报告

电子时钟电子时钟的功能可以显示时间还可以修改时间结构图NO7此电路适合于设计时钟定时器秒表等因为可利用键8和键5分别控制时钟的清零和设置时间的使能利用键75和1进行时分秒的设置87654321扬声器译码器译码器...

Verilog实验报告模板

杭州电子科技大学实验报告实验课程名称EDA技术与VerilogHDL实实班姓学指导教验验序内号容级名号师二一年月日1XXXXXXX杭州电子科技大学实验报告实验目的与要求实验名称XXXXX实验原理简要叙述实验的原...

Verilog HDL实验报告

HDL语言应用与设计实验报告学院计算机学院班级电子信息科学与技术姓名学号指导老师20xx年4月中国矿业大学计算机学院实验报告

verilog汽车尾灯实验设计报告

数字系统设计实验报告实验04汽车尾灯控制系统设计实验地点理工楼703实验时间20xx年5月13日实验04汽车尾灯控制系统设计与实现一实验目的1了解汽车尾灯的工作原理2进一步熟悉Verilog语言以及Quartu...

FPGA——Verilog时序电路实验报告

Verilog设计实验报告唐睿电子工程20xx30120xx621武汉大学电工电子实验教学示范中心集成电路设计实验实验报告学院电子信息学院专业电子信息工程20xx年5月7日234567891011

实验报告-时序逻辑电路的Verilog HDL实现

时序逻辑电路的VerilogHDL实现一实验要求1编写JK触发器8位数据锁存器数据寄存器的VerilogHDL程序并实现其仿真及其测试程序2在实验箱上设计含异步清零和同步使能的计数器3进行波形仿真测试后画出仿真...

关于Altium Designer10的一份实验报告

沈阳工业大学实验名称CAD综合实验实验项目桥式整流电路的瞬态分析专业班级通信工程1003班学号100404315学生姓名吴开来指导教师赵柏山1实验名称桥式整流电路桥式整流电路的瞬态分析和PCB电路板制作2实验目...

verilog实验报告(21篇)