首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 北航verilog上机实验报告

    时间:2020-11-22 11:38:00 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:北航 上机 实验

      北

     京

     航

     空

     航

     天

     大

     学

      Verilog 上机 实验 报告

     目录 实验一

     简单的组合逻辑设计 ........................................................................................... 4

     一、

     实验目的...................................................................................................................... 4

     二、

     实验内容...................................................................................................................... 4

     三、

     对任务的理解 .............................................................................................................. 4

     四、

     实现思路...................................................................................................................... 4

     五、

     代码 ............................................................................................................................. 4

     六、

     仿真波形...................................................................................................................... 5

     七、

     总结及对波形的说明 ................................................................................................... 5

     实验二

     简单分频时序逻辑电路的设计 ............................................................................ 6

     一、

     实验目的...................................................................................................................... 6

     二、

     实验内容...................................................................................................................... 6

     三、

     对任务的理解 .............................................................................................................. 6

     四、

     实现思路...................................................................................................................... 6

     五、

     代码 ............................................................................................................................. 6

     六、

     仿真波形...................................................................................................................... 7

     七、

     总结及对波形的说明 ................................................................................................... 7

     实验三

     利用条件语句实现记数分频时序电路 ................................................................ 9

     一、

     实验目的...................................................................................................................... 9

     二、

     实验内容...................................................................................................................... 9

     三、

     对任务的理解 .............................................................................................................. 9

     四、

     实现思路...................................................................................................................... 9

     五、

     代码 ............................................................................................................................. 9

     六、

     仿真波形.................................................................................................................... 10

     七、

     总结及对波形的说明 ................................................................................................. 10

     实验四

     阻塞赋值与非阻塞赋值的区别 .......................................................................... 11

     一、

     实验目的.................................................................................................................... 11

     二、

     实验内容.................................................................................................................... 11

     三、

     对任务的理解 ............................................................................................................ 11

     四、

     实现思路.................................................................................................................... 11

     五、

     代码 ........................................................................................................................... 11

     六、

     仿真波形......................................................................................... 错误!未定义书签。

     七、

     总结及对波形的说明 ...................................................................... 错误!未定义书签。

     实验五

     用 用 ALWAYS 块实现比较复杂的组合逻辑电路 ......................... 错误!未定义书签。

     一、

     实验目的......................................................................................... 错误!未定义书签。

     二、

     实验内容......................................................................................... 错误!未定义书签。

     三、

     对任务的理解 ................................................................................. 错误!未定义书签。

     四、

     实现思路......................................................................................... 错误!未定义书签。

     五、

     代码 ................................................................................................ 错误!未定义书签。

     六、

     仿真波形......................................................................................... 错误!未定义书签。

     七、

     总结及对波形的说明 ...................................................................... 错误!未定义书签。

     实验六

     在 在 VERILOG HDL 中使用函数 .................................................. 错误!未定义书签。

     一、

     实验目的......................................................................................... 错误!未定义书签。

     二、

     实验内容......................................................................................... 错误!未定义书签。

     三、

     对任务的理解 ................................................................................. 错误!未定义书签。

     四、

     实现思路......................................................................................... 错误!未定义书签。

     五、

     代码 ................................................................................................ 错误!未定义书签。

     六、

     仿真波形......................................................................................... 错误!未定义书签。

     七、

     总结及对波形的说明 ...................................................................... 错误!未定义书签。

     实验七

     在 在 VERILOG HDL 中使用任务(TASK )

     ................................... 错误!未定义书签。

     一、

     实验目的......................................................................................... 错误!未定义书签。

     二、

     实验内容......................................................................................... 错误!未定义书签。

     三、

     对任务的理解 ................................................................................. 错误!未定义书签。

     四、

     实现思路......................................................................................... 错误!未定义书签。

     五、

     代码 ................................................................................................ 错误!未定义书签。

     六、

     仿真波形......................................................................................... 错误!未定义书签。

     七、

     总结及对波形的说明 ...................................................................... 错误!未定义书签。

     实验八

     利用有限状态机进行时序逻辑的设计 ................................... 错误!未定义书签。

     一、

     实验目的......................................................................................... 错误!未定义书签。

     二、

     实验内容......................................................................................... 错误!未定义书签。

     三、

     对任务的理解 ................................................................................. 错误!未定义书签。

     四、

     实现思路......................................................................................... 错误!未定义书签。

     五、

     代码 ................................................................................................ 错误!未定义书签。

     六、

     仿真波形......................................................................................... 错误!未定义书签。

     七、

     总结及对波形的说明 ...................................................................... 错误!未定义书签。

     选做实验一

     帧同步器设计 ..................................................................... 错误!未定义书签。

     一.实验内容 ............................................................................................ 错误!未定义书签。

     二.实现思路 ............................................................................................ 错误!未定义书签。

     三.代码 .................................................................................................... 错误!未定义书签。

     四.仿真结果 ............................................................................................ 错误!未定义书签。

     选做实验四

     数字去噪 器设计 .................................................................. 错误!未定义书签。

     一.实验内容 ............................................................................................ 错误!未定义书签。

     二.实现思路 ............................................................................................ 错误!未定义书签。

     三.代码 .................................................................................................... 错误!未定义书签。

     四.仿真结果 ............................................................................................ 错误!未定义书签。

      实验一

     简单的组合逻辑 设计

     一、

     实验目的

     1. 掌握基本组合逻辑电路的实现方法; 2. 初步了解两种基本组合逻辑电路的生成方法; 3. 学习测试模块的编写; 4. 通过综合和布局布线了解不同层次仿真的物理意义。

     二、

     实验内容

     设计一个字节(8 位)的比较器。

     要求:比较两个字节的大小,如 a[7:0]大于 b[7:0],则输出高电平,否则输出低电平;并改写测试模型,使其能进行比较全面的测试。观察 RTL 级仿真、综合后门级仿真和布局布线后仿真有什么不同,并说明这些不同的原因。从文件系统中查阅自动生成的compare.vm,compare.vo文件和compare.v作比较,说出它们的不同点和相同点。

     三、

     对任务 的理解

     本题就是一个很简单的比较电路。对两个 8 位的输入数据的大小进行比较,并且输出比较结果 四、

     实现思路

     1. 首先这个比较器应当有3个对外的端口,分别是:两个8位数据的输入端口,一个比较结果的输出端口。

     2. 由于比较器的输出结果是随着输入变化立即变化的,因此这是一个组合逻辑的电路。主程序很容易实现。

     3. 测试模块要产生随机的两个8位输入数据,因此利用系统任务$random来实现。通过一个时钟,每隔一段时间产生两个新的随机数。

     五、

     代码

     1. 主程序 ---------------------------------------文件名 compare_8bit.v-------------------------------------------- module compare_8bit(a,b,re);

      input [7:0] a,b;

      output re;

      reg re;

     always @(a or b)

      //if the input changes, the output changes immediately.

      if (a>b)

      re=1;

      else

      re=0; endmodule 2. 测试模块 ----------------------------------------文件名 compare_8bit_tb.v----------------------------------- `timescale 1ns/1ns module t;

     reg [7:0] a,b;

      reg clk;

      wire re;

      initial

      begin

     a=0;

      b=0;

      clk=0;

      end

      always #50 clk=~clk;

      always @(posedge clk)

      begin

      a={$random}%128;

     b=($random)%128;

      end

      initial

      begin

      #100000

      $stop;

      end

      compare_8bit m(.a(a),.b(b),.re(re)); endmodule 六、

     仿真波形

      七、

     总结及 对波形的说明

     1. 实验结论 从波形中可以看出当 a>b 时,re=1;当 a<b 时,re=0。满足题目的要求。

     2. 实验思考 ( 课本 P316 思考题 一 )

     1) 在测试方法二中,第二个 initial 块用于设置仿真时长。

     2) 它与第一个 initial 块是一个并行的关系,同一个测试文件中,可以有多个 initial 块,且均从 0 时开始顺序运行,并且仅运行一次。

     3) 如果在第二个 initial 块中,没有写#100000 或者$stop,仿真将会按测试界面设置的仿真时间进行仿真。(如下图)

     4) 第二种测试方法更全面,因为第二种测试方法产生的 a 和 b 的值是随机的,可以测试多种情况,而第一种测试方法只能按照测试文件中给定的数据进行测试,不具有普遍性。

     3. 实验 总结 本次实验是 Verilog 上机的第一个实验,内容比较简单,并且课本上已经给出了范例,只需要稍加修改便可以写出程序的代码。

     在本次试验中,由于实验软件的限制,我仅仅进行了 RTL 级的仿真,如果要进行综合后门级仿真和布局布线后仿真,可以通过其他软件来进行。

     RTL 级仿真、综合后门级仿真和布局布线后仿真的不同之处在于所在的层次不同。依次更加底层化。而 compare.vm,compare.vo 文件和 compare.v文件的描述也是不同层次的描述。

     实验二

     简单分频 时序逻辑电路的设计

     一、

     实验目的

     1. 掌握最基本时序电路的实现方法; 2. 学习时序电路测试模块的编写; 3. 学习综合和不同层次的仿真。

     二、

     实验内容

     已然制作 clk_in 的 2 分频 clk_out,要求输出时钟的相位与上面的 2 分频器的输出相位正好相反。编写测试模块,给出仿真波形。改变输入始终的频率,观察 RTL 级仿真、综合后门级仿真和布线后仿真的不同,并写出报告 三、

     对任务 的理解

     本题的实验就是要实现一个分频器。

     四、

     实现思路

     1. 首先这个比较器应当有3个对外的端口,分别是:输入时钟信号clk_in,输出时钟信号clk_out,复位信号reset。

     2. 由于输入信号中有时钟信号,并且输出是随着输入时钟的某个沿的出现而变化的,因此是一个时序逻辑电路。

     3. 题目中要求输出的2分频时钟信号与例题中的相位相反。最简单的想法就是将复位信号有效时的输出信号反相。

     五、

     代码

     1. 主程序 ---------------------------------------文件名 half_clk.v-------------------------------------------- module half_clk(reset,clk_in,clk_out);

      input reset, clk_in;

      output clk_out;

      reg clk_out;

     always @(posedge clk_in)

      begin

      if (!reset)

      clk_out=1;

      //原例题中此处为 clk_out=0;

      else

      clk_out=~clk_out;

      end endmodule 2. 测试模块 ----------------------------------------文件名 half_clk_tb.v----------------------------------- `timescale 1ns/100ps `define clk_cycle 50 module top;

      reg clk,reset;

      wire clk_out;

      always

     #`clk_cycle clk=~clk;

      initial

      begin

      clk=0;

      reset=1;

      #10 reset=0;

      #110 reset=1;

      #100000

     $stop;

      end

     half_clk m0(.reset(reset),.clk_in(clk),.clk_out(clk_out));

      endmodule

     六、

     仿真波形

      七、

     总结及 对波形的说明

     1. 实 实 验结论 从波形中可以看出当clk_out的周期为clk_in的两倍,并且在t=300ns时,为clk_out的下降沿,恰好和例题中的输出信号波形反相,满足题目的要求。

     2. 实验思考 ( 课本 P318 思考题二)

     1) 如果没有 reset 信号,可以通过在测试文件中的 initial 块中设置 clk_in 的初值为 1 来使输出反相。

     2) 只用 clk 时钟沿的出发可以通过一个计数器来产生其他分频的时钟,并且通过调节计数器的值来产生不同占空比的分频时钟,其代码如下:

     i. 产生任意分频的时钟 ----------------------------主程序 div.v ----------------------------------------- module div(rst,clk,out,num);

      input rst, clk;

      input [3:0] num;

     //通过 num 调节分频数

      output out;

      reg out;

      reg [3:0] i;

      always @(posedge clk)

      begin

      if(!rst)

      begin

      i<=0;

      out<=0;

      end

      else

      begin

      if (i==((num[3:1])-1))

     //num[3:1]代替 num/2

      begin

      i<=0;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      end

      endmodule

      ----------------------------测试文件 div_tb.v ----------------------------------------- `timescale 1ns/100ps `define clk_cycle 50 module t;

      reg clk,rst;

      wire out;

      reg [3:0] num;

      always

     #`clk_cycle clk=~clk;

      initial

      begin

      num=4;

      clk=0;

      rst=1;

      #10 rst=0;

      #110 rst=1;

      #100000

     $stop;

      end

     div m(.rst(rst),.clk(clk),.out(out),.num(num));

      endmodule

      ii. 产生占空比不同的分频时钟 ----------------------------主程序 div_ex.v ----------------------------------------- module div_ex(rst,clk,out,top,down);

      input rst, clk;

      input [3:0] top,down;

      //通过 top,down 调节占空比

     output out;

      reg out;

      reg [3:0] i;

      always @(posedge clk)

      begin

      if(!rst)

      begin

      i<=0;

      out<=0;

      end

      else

      begin

      if (out==1)

      begin

      if (i==(top-1))

      begin

      i<=0;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      else

      begin

      if (i==(down-1))

      begin

      i<=0;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      end

      end

      endmodule

      ----------------------------测试文件 div_ex_tb.v -----------------------------------------

     `timescale 1ns/100ps `define clk_cycle 50 module t;

      reg clk,rst;

      wire out;

      reg [3:0] top,down;

      always

     #`clk_cycle clk=~clk;

      initial

      begin

      top=2;

      down=4;

      clk=0;

      rst=1;

      #10 rst=0;

      #110 rst=1;

      #100000

     $stop;

      end

     div_ex m(.rst(rst),.clk(clk),.out(out),.top(top),.down(down));

      endmodule

      3. 实验 总结 本次实验是 Verilog 上机的第二个实验,练习了比较简单的时序逻辑电路的设计——分频器。

     其中二分频的设计比较简单,课本上有几乎完全相同的代码,只需要稍加修改即可。而任意分频的设计比较困难,需要好好思考。我通过想学长请教,以及上网上查找资料,利用一个计数器完成了任意分频的设计,而产生不同占空比的设计,其原理相同。

     实验三

     利用 条件语句实现记数分频时序电路

     一、

     实验目的

     1. 掌握条件语句在简单时序模块设计中的使用; 2. 学习在 Verilog 模块中应用计数器; 3. 学习测试模块的编写、综合和不同层次的仿真。

     二、

     实验内容

     利用 10MB 的时钟,设计一个单周期形状的周期波形。

     三、

     对任务 的理解

     题目要求产生特定形状的周期波形,从给出的波形来看,就是一个 top=10us,down=40us,T=50us 的周期方波。如果输入时钟为 10MB,则top=100,down=400。可以利用实验 2 中占空比不同的分频电路的代码来完成任务。

     四、

     实现思路

     1. 首先这个比较器应当有3个对外的端口,分别是:复位rst,输入时钟clk和输出out。

     2. 利用计数器产生特定的延时,来产生响应的波形。这个任务和实验二中的思考题二第二个小任务完全相同。

     五、

     代码

     1. 主程序 ---------------------------------------文件名 div_ex.v-------------------------------------------- module div_ex(rst,clk,out);

      input rst, clk;

      reg [6:0] top;

     reg [8:0] down;

     output out;

      reg out;

     always @(posedge clk)

      begin

      if(!rst)

      begin

      top<=0;

      down<=0;

      out<=0;

      end

      else

      begin

      if (out==1)

      begin

      if (top==100)

      begin

      top<=0;

      out<=~out;

      end

      else

      begin

      top<=top+1;

      out<=out;

      end

      end

      else

      begin

      if (down==400)

      begin

      down<=0;

     out<=~out;

      end

      else

      begin

      down<=down+1;

      out<=out;

      end

      end

      end

      end

      endmodule

      2. 测试模块 ----------------------------------------文件名 div_ex_tb.v-----------------------------------

     `timescale 1ns/1ns `define clk_cycle 50 module t;

      reg clk,rst;

      wire out;

     always

     #`clk_cycle clk=~clk;

      initial

      begin

     clk=0;

      rst=1;

      #10 rst=0;

      #110 rst=1;

      #600000

     $stop;

      end

     div_ex m(.rst(rst),.clk(clk),.out(out));

      endmodule 六、

     仿真波形

      七、

     总结及 对波形的说明

     1. 实验结论 从波形中可以看出每个周期中高电平持续时间为 10000ns=10us,低电平持续时间为 40000ns=40us。满足题目的要求。

     2. 实验 总结 本次实验是 Verilog 上机的第三个实验,由于有了实验二中的经验,所以只需要把实验二中的程序稍加修改即可得到结果。

     但是在实验的过程中我依然遇到了一些阻碍。

     首先是由于数量级关系没有搞对,使得计数器的位数出了问题。其次是在测试文件中调用了$stop,而自己预设的 stop 的延迟时间太短,导致输出时钟为低电平(实际上时间还不到一个周期),令自己误以为自己的程序本身有逻辑问题,从而耽误了很多时间。

     在看输出波形的长度的时候,可以用 modelsim 中的 cursor 效用,用光标来显示波形持续的长度。

     实验四

     阻塞赋值与 非阻塞赋值的 区别

     一、

     实验目的

     1. 通过实验,掌握阻塞赋值与非阻塞赋值的概念和区别; 2. 了解非阻塞和阻塞赋值的不同使用场合; 3. 学习测试模块的编写、综合和不同层次的仿真。

     二、

     实验内容

     在 blocking 模块中按如下两种写法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果 (1)

     always @(posedge clk)

      begin

     c=b;

     b=a; end (2)

     always @(posedge clk) b=a; always @(posedge clk) c=b; 三、

     对任务 的理解

     通过给定的两段代码理解所谓阻塞赋值与非阻塞赋值的区别。

     四、

     实现思路

     按照给定的代码进行试验,并查看实验结果。

     五、

     代码

     1. 主程序 ---------------------------------------文件名 blocking.v--------------------------------------------

      module blocking(clk, a,b,c);

      output [3:0] b,c;

      input [3:0] a;

      input clk;

      reg [3:0] b,c;

     always @(posedge clk)

      begin

      c = b;

      b = a;

      $display("Blocking: a = %d, b = %d, c = %d.",a,b,c);

      end

      endmodule ---------------------------------------文件名 blocking_ex.v-------------------------------------------- module blocking_ex(clk, a,b,c);

      output [3:0] b,c;

      input [3:0] a;

      input clk;

      reg [3:0] b,c;

     always @(posedge clk)

      b = a;

      always @(posedge clk)

      begin

      c = b;

      $display("Blocking: a = %d, b = %d, c = %d.",a,b,c);

      end

      endmodule

     2. 测试模块 ----------------------------------------文件名 div_ex_tb.v----------------------------------- `timescale 1ns/100ps `include"./blocking.v" `include"./blocking_ex.v"

      科教兴国

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识