实验一 EDA 设计软件的使用

实验内容

实现1 位全加器

图 1 在顶层编辑窗中设计好全加器

程序代码

module MULT4B(RX,AX,BX);output [3:0] RX; input [3:0] AX,BX;reg[7:0] TA,RX;     reg [3:0] TB;always @(AX or BX)beginRX=0;  TA=AX;  TB=BX;repeat(4)  beginif (TB[0])  begin RX=RX+TA;    endTA=TA<<1; TB=TB>>1;     endend
endmodule

实验仿真结果

实验二 组合逻辑电路设计

实验内容

应用文本输入方式设计实现16-4 优先编码器,要求进行编译、仿真,仿真结果正确。掌握 CASE 语句和 IF语句的使用方法。应用文本输入方式设计实现 4-16 译码器,要求进行编译、仿真,仿真结果正确。

程序代码

4-16 译码器

/* 4-16 译码器 */
module CODE4_16(aa,bb);input [3:0] aa;output reg[15:0] bb;reg [15:0] bb;always@(aa)begincase(aa)4'b0000:OUT=16'b0000_0000_0000_0001;4'b0001:OUT=16'b0000_0000_0000_0001;4'b0010:OUT=16'b0000_0000_0000_0001;4'b0011:OUT=16'b0000_0000_0000_0001;4'b0100:OUT=16'b0000_0000_0000_0001;4'b0101:OUT=16'b0000_0000_0000_0001;4'b0110:OUT=16'b0000_0000_0000_0001;4'b0111:OUT=16'b0000_0000_0000_0001;4'b1000:OUT=16'b0000_0000_0000_0001;4'b1001:OUT=16'b0000_0000_0000_0001;4'b0000:OUT=16'b0000_0000_0000_0001;endcaseend
endmodule

16-4 优先编码器

/* 16-4 优先编码器 */
module CODE16_4(x,y,e);input wire [15:0] x ;output reg [3:0] y;output reg       e;integer i;integer j=0;always@(*)beginfor(i=0;i<16;i=i+1)beginif(x[i]==1) y<=i;else      j=j+1;endif(j==16) e<= 1;else     e<=0;end
endmodule

实验仿真结果

4-16 译码器

16-4 优先编码器

实验三  N 进制计数器设计

实验内容

1.设计并实现一个带计数使能、进位输出及同步清 0 的增 1 二十进制计数器。

程序代码

module CNT20 (CLK,RST,EN,LOAD,COUT,DOUT,DATA);input CLK,EN,RST,LOAD;input[4:0] DATA;output[4:0] DOUT;output COUT;reg[4:0] Q1;  reg COUT;assign DOUT = Q1;always@(posedge CLK )beginif(!RST) Q1<=0;else if(EN) beginif(!LOAD) Q1<=DATA;else if(Q1<20) Q1<=Q1+1;else Q1<=5'b00000;endendalways @(Q1)if(Q1==5'b10100) COUT = 1'b1;else COUT=1'b0;
endmodule

2.设计并实现一个带计数使能、置位功能及异步清 0 的增 1/减 1 的 8 位二进制计数器。

程序代码

module CNT8_2 (CLK,RST,EN,LOAD,DOUT,DATA,flag);input CLK,EN,RST,LOAD,flag;input[7:0] DATA;output[7:0] DOUT;reg[7:0] Q1; assign DOUT = Q1;always@(posedge CLK or negedge RST )beginif(!RST) Q1<=0;else if(EN) beginif(!LOAD) Q1<=DATA;else if(flag==1)beginif(Q1<8'b11111111) Q1<=Q1+1;else Q1<=8'b00000000;endelse if(flag==0)beginif(Q1>8'b00000000) Q1<=Q1-1;else Q1<=8'b11111111;endendend
endmodule

实验仿真结果

带计数使能、进位输出及同步清 0 的增 1 二十进制计数器

一个带计数使能、置位功能及异步清 0 的增 1/减 1 的 8 位二进制计数器

实验四 移位寄存器设计

实验内容

1.设计 6 位串入/并出左移移位寄存器

要求:输入的数据是每次一位依序进入,故输入、输出信号之间有 6 个 CLK 时间的延迟。为了过滤中间没用的数据,只读取完整的存储数据,可将取样脉冲的周期设定成 CLK 脉冲的六倍,也就是说,每经过 6 个 CLK 脉冲后再读取数据一次,便能每次读取都得到正确的数据。

程序代码

module SHIF6L(clk,din,dout);input clk;input din;output [5:0] dout;reg [5:0] dout;reg [5:0] qtemp;reg [2:0] temp;always@(posedge clk)beginif(temp<=5)beginqtemp <= {qtemp[4:0],din};temp <=temp+1;endelse if(temp>5)  temp<=0;       endalways@(temp)   beginif(temp>5) dout<=qtemp;end
endmodule

2.设计 6 位并入/串出右移移位寄存器

要求:输入的数据是 6 位一次进入,每经过 1 个 CLK 脉冲后串行输出 1 位数据。

程序代码

module SHIF6R(clk,din,dout);input [5:0] din;input clk;output dout;wire dout;reg [5:0] qtemp;(* synthesis,keep *) wire en;reg [2:0] temp;always@(posedge clk )beginif(en == 1)qtemp <= din; else qtemp <= {qtemp[0],qtemp[5:1]};       endassign en=(temp==5)? 1:0;assign dout = qtemp[0];always@(posedge clk)beginif(temp<5)temp <=temp+1;else temp<=0;end
endmodule

实验仿真结果

设计 6 位串入/并出左移移位寄存器

设计 6 位并入/串出右移移位寄存器

实验五 用状态机设计实现 ADC0809 采样控制器

实验内容

1. 分析 ADC0809 采样控制器的时序,划分状态,并画出状态图,实现 VERILOG HDL 描述,进行仿真测试及硬件测试。

2. 利用 QuartusII 对例 10-2 进行文本编辑输入和仿真测试;给出仿真波形。最后进行引脚锁定并进行测试,硬件验证例 10-2 电路对 ADC0809 的控制功能。12

3. 测试步骤:建议选择电路模式 No.5,由对应的电路图可见, ADC0809 的转换时钟 CLK 已经事先接有 750kHz 的频率,引脚锁定为:START 接 PIO34,OE(ENABLE)接 PIO35,EOC接 PIO8,ALE 接 PIO33,状态机时钟 CLK 接 clock0,ADDA接 PIO32(ADDB 和 ADDC 都接 GND),ADC0809 的 8 位输出数 据线接 PIO23~PIO16,锁存输出 Q 显示于数码 8/数码7(PIO47~PIO40)。

4. 实验操作:将 GW48 EDA 系统左下角的拨码开关的 4、6、7 向下拨其余向上,即使 0809 工作使能,及使 FPGA 能接受来自 0809 转换结束的信号(对于 GW48-CK 系统,左下角选择插针处的“转换结束”和“A/D 使能”用二短路帽短接)。下载 ADC0809 中的 ADCINT.sof 到实验板的 FPGA 中;clock0 的短路帽接可选 12MHz、6MHz、65536Hz 等频率;按动一次右侧的复位键;用螺丝刀旋转 GW48 系统左下角的精密电位器,以便为 ADC0809 提供变化的待测模拟信号(注意,这时必须在例 8-2 中赋值:ADDA <= '1',这样就能通过实验系统左下的 AIN1 输入端与电位器相接,并将信号输入 0809 的 IN1 端)。这时数码管 8 7 将显示 ADC0809 采样的数字值(16 进制),数据来自 FPGA 的输出。数码管 2 和 1 也将显示同样数据,此数据直接来自 0809 的数据口。实验结束后注意将拨码开关拨向默认:仅“4”向下。

程序代码

module ADDC0809(D,CLK,EOC,RST,ALE,START,OE,ADDA,Q,LOCK_T);input [7:0] D;input CLK,RST;input EOC;output ALE;output START,OE;output ADDA,LOCK_T;output [7:0] Q;reg ALE,START,OE;parameter s0=0,s1=1,s2=2,s3=3,s4=4;reg [4:0] cs,next_state;reg [7:0] REGL;reg LOCK;always@(cs or EOC) begincase (cs)s0:begin ALE=0;START=0;OE=0;LOCK=0;next_state<=s1; ends1:begin ALE=1;START=1;OE=0;LOCK=0;next_state<=s2; ends2:begin ALE=0;START=0;OE=0;LOCK=0;if(EOC==1'b1) next_state<=s3; else next_state<=s2;  end s3:begin ALE=0;START=0;OE=1;LOCK=0;next_state<=s4; ends4:begin ALE=0;START=0;OE=1;LOCK=1;next_state<=s0; enddefault:begin ALE=0;START=0;OE=0;LOCK=0;next_state<=s0; endendcase endalways@(posedge CLK or posedge RST) beginif(RST) cs<=s0;else cs <=next_state; endalways@(posedge LOCK) if(LOCK) REGL<=D;assign ADDA=1;assign Q=REGL;assign LOCK_T=LOCK;endmodule

实验仿真结果

实验六 数字频率计设计

实验内容

设计 8 位十进制频率计,学习较复杂的数字系统设计方法。

程序代码

module FREQ_C ( CLK1Hz,Fin,DATOUT);input CLK1Hz;input Fin;output [31:0] DATOUT;wire CNT_EN;wire LOAD;wire reset;FTCTRL ftctrl (.CLKK(CLK1Hz),.RST_CNT(reset),.CNT_EN(CNT_EN),.LOAD(LOAD));wire [3:0] DATA1;wire c1;COUNTER32 u1 (.CLR(reset),.ENABL(CNT_EN),.Fin(Fin),.DOUT(DATA1),.COUT(c1));wire [3:0] DATA2;wire c2;COUNTER32 u2 (.CLR(reset),.ENABL(CNT_EN),.Fin(c1),.DOUT(DATA2),.COUT(c2));wire [3:0] DATA3;wire c3;COUNTER32 u3 (.CLR(reset),.ENABL(CNT_EN),.Fin(c2),.DOUT(DATA3),.COUT(c3)); wire [3:0] DATA4;wire c4;COUNTER32 u4 (.CLR(reset),.ENABL(CNT_EN),.Fin(c3),.DOUT(DATA4),.COUT(c4));wire [3:0] DATA5;wire c5;COUNTER32 u5 (.CLR(reset),.ENABL(CNT_EN),.Fin(c4),.DOUT(DATA5),.COUT(c5));wire [3:0] DATA6;wire c6;COUNTER32 u6 (.CLR(reset),.ENABL(CNT_EN),.Fin(c5),.DOUT(DATA6),.COUT(c6));wire [3:0] DATA7;wire c7;COUNTER32 u7 (.CLR(reset),.ENABL(CNT_EN),.Fin(c6),.DOUT(DATA7),.COUT(c7));wire [3:0] DATA8;wire c8;COUNTER32 u8 (.CLR(reset),.ENABL(CNT_EN),.Fin(c7),.DOUT(DATA8),.COUT(c8));wire [31:0] DATOUT;wire [31:0] DAIN;assign DAIN ={DATA8,DATA7,DATA6,DATA5,DATA4,DATA3,DATA2,DATA1};REG32B reg32b(.LK(LOAD),.DIN(DAIN),.DAT32(DATOUT));
Endmodulemodule     COUNTER32 (CLR, ENABL,  Fin,    DOUT, COUT);input CLR;input ENABL;input Fin;output  COUT;output [3 :0] DOUT;reg [3 :0] DOUT;reg COUT;always @ (posedge Fin or posedge CLR )if (CLR)DOUT<=0;else if (ENABL==1)beginif( DOUT<9) DOUT<=DOUT +1;elseDOUT<=0;endalways @(DOUT)if (DOUT==9) COUT<=1;elseCOUT<=0;
endmodulemodule FTCTRL (CLKK,CNT_EN,RST_CNT,LOAD);input CLKK;output CNT_EN,RST_CNT,LOAD;wire   CNT_EN,LOAD;reg RST_CNT,Div2CLK;always @ (posedge CLKK)Div2CLK <= ~Div2CLK;always @(CLKK or Div2CLK)begin if (CLKK == 1'b0 & Div2CLK == 1'b0)RST_CNT <= 1'b1;else RST_CNT <= 1'b0;endassign LOAD   =  ~Div2CLK;assign CNT_EN =  Div2CLK;
endmodulemodule REG32B (LK, DIN, DAT32);input LK;
input [9:0] DIN;
output [9:0] DAT32;
reg [9:0] DAT32;
always @ (posedge LK)if(LK)DAT32<=DIN;elseDAT32<=DAT32;
endmodule

实验仿真结果

Verilog HDL|实验项目六例相关推荐

  1. Verilog HDL 实验题

    文章目录 Verilog HDL 实验 实验一 Modelsim的使用 1.实现一个2选1数据选择器 2.D触发器 3.设计4选1的数据选择器电路 实验二 数据选择器的设计与vivado集成开发环境 ...

  2. (64)Verilog HDL多模块重复例化

    (64)Verilog HDL多模块重复例化 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL多模块重复例化 5)结语 1.2 FPGA简介 FPG ...

  3. (65)Verilog HDL多模块重复例化:generate for

    (65)Verilog HDL多模块重复例化:generate for 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL多模块重复例化:genera ...

  4. Linux程序设计实验项目六,《linux程序设计》实验教学大纲

    <linux程序设计>实验教学大纲 课程名称:Linux程序设计 课程编号:408412420408436407 适用专业:计算机科学与技术网络工程软件工程 总 学 分:3 总 学 时:4 ...

  5. 计算机网络实验感想6,计算机网络实验项目六

    实验名称:实验项目6网络协议分析 实验目的 掌握以太网帧的格式及各字段的含义 掌握IP包的组成格式及各字段的含义 掌握UDP报文和TCP报文的格式及各字段的含义 理解HTTP协议.DNS协议工作机制 ...

  6. Python实验项目1例:使用进程池统计指定范围内素数的个数

    本周赠书活动:董付国老师Python系列教材赠书活动(40本) -------------------------------- 适用专业: 适用于计算机.网络工程.软件工程等相关专业,其他专业选做. ...

  7. Python|实验项目八例

    实验一:编写一个Python程序,模拟一个自动柜员机(ATM)验证用户输入密码的操作.ATM提示用户输入密码,如果用户输入正确密码,ATM输出密码正确信息,然后终止程序. #exp1_1 def ma ...

  8. 【例说】Verilog HDL 编译器指令,你见过几个?

    Verilog HDL 编译器指令 复杂一点的系统在进行设计或者验证时,都会用到一些编译器指令,那么什么是编译器指令? Verilog HDL编译器指令由重音符(')开始.在Verilog 语言编译时 ...

  9. 优秀的 Verilog/FPGA开源项目介绍(三十六)-RISC-V(新增一)

    关于RISC-V的二三事 risc-v官网 ❝ https://riscv.org/ RISC-V(跟我读:"risk----------------five")是一个基于精简指令 ...

最新文章

  1. PCB板上字母表示的含义
  2. cocostuff10k数据集介绍_COCO数据集整理
  3. opencv检测黑色区域
  4. c语言探测次数不超过4的哈希算法,HihoCoder1084: 扩展KMP(二分+hash,求T串中S串的数量,可以失配一定次数)...
  5. boost::core模块实现分配const void指针
  6. Java学习笔记(7)——Java基础之IO多线程网络思维导图
  7. halcon模板匹配学习(一) Matching 初印象
  8. GitHubamp;gitee图床网站源码
  9. java基础运算符、键盘录入
  10. 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败
  11. globk命令帮助信息
  12. 获取当天开始时间以及结束时间
  13. 东北师范大学计算机研究生拟录取名单,东北师范大学2016年硕士研究生拟录取名单公示...
  14. 操作性定义(Operational Definition)
  15. python小乌龟绘制迷宫_python小乌龟turtle数学作图
  16. 国际清算银行要求更多的加密货币监管
  17. 计算机跳转到用户选择,win7系统开机要选择用户才能进入系统怎么办
  18. 网络通信协议是什么?
  19. 宝宝头上有一圈不长头发
  20. 智能优化算法——灰狼优化算法(PythonMatlab实现)

热门文章

  1. Redis主从配置详细流程
  2. 【pytorch】torch2trt
  3. Codecademy网学习Python第六天
  4. 图片验证码 java_java生成图片验证码
  5. Java基础(适合新学者和架构师阅读)
  6. numpy中的ndarray方法和属性
  7. Linux系统下如何在防火墙开放指定端口
  8. 个人总结--关于学习过程中的一些经验心得分享
  9. 微信小程序Demo组件大全(对话框、指示器、五星评分,画廊,影院座位……
  10. Weka安装及简单应用