• 领导讲话
  • 自我介绍
  • 党会党课
  • 文秘知识
  • 转正申请
  • 问题清单
  • 动员大会
  • 年终总结
  • 工作总结
  • 思想汇报
  • 实践报告
  • 工作汇报
  • 心得体会
  • 研讨交流
  • 述职报告
  • 工作方案
  • 政府报告
  • 调研报告
  • 自查报告
  • 实验报告
  • 计划规划
  • 申报材料
  • 当前位置: 勤学考试网 > 公文文档 > 党会党课 > 正文

    2020年北航verilog上机实验报告

    时间:2020-11-24 16:59:34 来源:勤学考试网 本文已影响 勤学考试网手机站

      北

      京

      航

      空

      航

      天

      大

      学

      Verilog 上机 实验 报告

      目录 实验一

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验二

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验三

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

      仿真波形.................................................................................................................... 1

      七、

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

      实验四

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验五

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验六

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验七

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

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      实验八

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

      一、

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

      二、

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

      三、

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

      四、

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

      五、

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

      六、

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

      七、

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

      选做实验一

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

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

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

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

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

      选做实验四

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

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

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

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

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

      实验一

      简单的组合逻辑 设计

      一、

      实验目的

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

      二、

      实验内容

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

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

      三、

      对任务 的理解

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

      实现思路

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

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

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

      五、

      代码

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

      input [7:] 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=; endmodule 测试模块 ----------------------------------------文件名 compare_8bit_tb.v----------------------------------- `timescale 1ns/1ns module t;

      reg [7:] a,b;

      reg clk;

      wire re;

      initial

      begin

      a=;

      b=;

      clk=;

      end

      always #5 clk=~clk;

      always @(posedge clk)

      begin

      a={$random}%128;

      b=($random)%128;

      end

      initial

      begin

      #1

      $stop;

      end

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

      仿真波形

      七、

      总结及 对波形的说明

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

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

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

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

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

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

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

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

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

      实验二

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

      一、

      实验目的

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

      二、

      实验内容

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

      对任务 的理解

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

      四、

      实现思路

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

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

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

      五、

      代码

       主程序 ---------------------------------------文件名 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=;

      else

      clk_out=~clk_out;

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

      reg clk,reset;

      wire clk_out;

      always

      #`clk_cycle clk=~clk;

      initial

      begin

      clk=;

      reset=1;

      #1 reset=;

      #11 reset=1;

      #1

      $stop;

      end

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

      endmodule

      六、

      仿真波形

      七、

      总结及 对波形的说明

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

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

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

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

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

      input rst, clk;

      input [3:] num;

      //通过 num 调节分频数

      output out;

      reg out;

      reg [3:] i;

      always @(posedge clk)

      begin

      if(!rst)

      begin

      i<=;

      out<=;

      end

      else

      begin

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

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

      begin

      i<=;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      end

      endmodule

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

      reg clk,rst;

      wire out;

      reg [3:] num;

      always

      #`clk_cycle clk=~clk;

      initial

      begin

      num=4;

      clk=;

      rst=1;

      #1 rst=;

      #11 rst=1;

      #1

      $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:] top,down;

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

      output out;

      reg out;

      reg [3:] i;

      always @(posedge clk)

      begin

      if(!rst)

      begin

      i<=;

      out<=;

      end

      else

      begin

      if (out==1)

      begin

      if (i==(top-1))

      begin

      i<=;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      else

      begin

      if (i==(down-1))

      begin

      i<=;

      out=~out;

      end

      else

      begin

      i<=i+1;

      out=out;

      end

      end

      end

      end

      endmodule

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

      `timescale 1ns/1ps `define clk_cycle 5 module t;

      reg clk,rst;

      wire out;

      reg [3:] top,down;

      always

      #`clk_cycle clk=~clk;

      initial

      begin

      top=2;

      down=4;

      clk=;

      rst=1;

      #1 rst=;

      #11 rst=1;

      #1

      $stop;

      end

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

      endmodule

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

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

      实验三

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

      一、

      实验目的

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

      二、

      实验内容

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

      三、

      对任务 的理解

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

      四、

      实现思路

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

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

      五、

      代码

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

      input rst, clk;

      reg [6:] top;

      reg [8:] down;

      output out;

      reg out;

      always @(posedge clk)

      begin

      if(!rst)

      begin

      top<=;

      down<=;

      out<=;

      end

      else

      begin

      if (out==1)

      begin

      if (top==1)

      begin

      top<=;

      out<=~out;

      end

      else

      begin

      top<=top+1;

      out<=out;

      end

      end

      else

      begin

      if (down==4)

      begin

      down<=;

      out<=~out;

      end

      else

      begin

      down<=down+1;

      out<=out;

      end

      end

      end

      end

      endmodule

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

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

      reg clk,rst;

      wire out;

      always

      #`clk_cycle clk=~clk;

      initial

      begin

      clk=;

      rst=1;

      #1 rst=;

      #11 rst=1;

      #6

      $stop;

      end

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

      endmodule 六、

      仿真波形

      七、

      总结及 对波形的说明

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

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

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

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

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

      实验四

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

      一、

      实验目的

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

      二、

      实验内容

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

      always @(posedge clk)

      begin

      c=b;

      b=a; end (2)

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

      对任务 的理解

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

      四、

      实现思路

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

      五、

      代码

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

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

      output [3:] b,c;

      input [3:] a;

      input clk;

      reg [3:] 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:] b,c;

      input [3:] a;

      input clk;

      reg [3:] 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

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

      科教兴国

    • 考试时间
    • 范文大全
    • 作文大全
    • 课程
    • 试题
    • 招聘
    • 文档大全

    推荐访问