数字式秒表verilog语言实现.doc_第1页
数字式秒表verilog语言实现.doc_第2页
数字式秒表verilog语言实现.doc_第3页
数字式秒表verilog语言实现.doc_第4页
数字式秒表verilog语言实现.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、实验目的(1)熟练掌握分频器、各种进制的同步计数器的设计。(2)熟练掌握同步计数器的级联方法。(3)掌握数码管的动态显示驱动方式。(4)掌握计数器的功能和应用。(5)理解开关防颤动的必要性。(6)掌握简单控制器的设计方法。二、实验内容和原理1、实验设计要求:(1)计时范围00.05959.9,分辨率为0.1s,用数码管显示计时值。(2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再次按键。计时停止(“停止”状态);第三次按键,计时器复位为00.0,且电路恢复到“初始”状态。2、根据设计要求,可画出秒表电路的原理框图,如图1-2所示,秒表电路由时钟管理模块(DCM)、分频器模块、按键处理模块、控制器、计时模块和显示模块组成。显示模块DCM clk sys_clk分频器模块en 计时模块 pulse10Hz pulse400Hz clear count stop按键处理模块控制器ButtonIn ButtonOut 图1-2 秒表电路的原理框图(1)DCM模块由于数字钟为低速电路,而XUP Virtex-II Pro 开发系统只提供100MHz主时钟,因此需插入DCM分频模块以降低系统的工作时钟,从而提高系统的可靠性。DCM可采用16分频,输出6.25MHz的sys_clk信号作为系统的主时钟。ISE生成DCM内核的Verilog HDL 代码:VgaDCM DCMInst(.CLKIN_IN(clk),.CLKDV_OUT(sys_clk),.CLKIN_IBUFG_OUT(),.CLK0_OUT(),.LOCKED_OUT();(2)分频器模块产生用于计时的1/10秒脉冲信号pulse10,频率为10Hz;产生用于显示模块的扫描脉冲信号pulse400,频率为400Hz。1/10秒脉冲信号pulse10和扫描脉冲信号pulse400的脉冲宽度为一个系统主时钟信号sys_clk的周期。分频器模块原理框图如图1-3所示,先设计一个15625分频器,产生400Hz的扫描信号pulse400,再由pulse400控制40分频器产生1/10秒脉冲信号pulse10。分频器设计:分频器实际上就是计数器:分频比n就是计数器的模。pulse400en out40进制计数器en out15625进制计数器装 订 线 “1” pulse10sys_clk图1-3 分频器原理框图分频器模块的Verilog HDL 代码:module div(sys_clk,sec,scan); /分频器模块input sys_clk;output sec,scan;div_n1 u1(.cout(scan),.cin(1b1),.clk(sys_clk);/按原理框图级联分频器div_n2 u2(.cout(sec),.cin(scan),.clk(sys_clk);endmodulemodule div_n1(cout,cin,clk);/ 15625进制计数器,产生400Hz扫描信号parameter n=15625;parameter counter_bits=14;output cout;input cin,clk;reg counter_bits:1qout=0;assign cout=(qout=(n-1)&cin;/进位always(posedge clk)begin if(cin)begin if(qout=(n-1) qout=0;else qout=qout+1;/计数end endendmodulemodule div_n2(cout,cin,clk);/40进制计数器,产生10Hz的0.1秒计时信号parameter n=40;parameter counter_bits=6;output cout;input cin,clk;reg counter_bits:1qout=0;assign cout=(qout=(n-1)&cin;/进位always(posedge clk)begin if(cin)begin if(qout=(n-1) qout=0;else qout=qout+1;/计数end endendmodule(3)按键处理模块按键处理模块完成按键输入的同步器、开关防颤动和脉冲宽度变换等功能,即当按键一次,输出一个宽度为sys_clk周期的脉冲信号Buttonout。其组成框图如图1-4所示。图1-4 按键处理模块的示意框图(i)同步器设计在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路是:首先尽可能的减少出线亚稳态的可能性,其次是尽可能地减少出线亚稳态给系统带来的危害的可能性。如图1-5所示的是一种基本同步器类型的原理框图,采用双锁存器法,即将输入的异步信号用两个锁存器连续锁存两次,这种设计理论上可以把出现亚稳态的几率降低到一个很小的程度,但这种方法对输入信号有一定延时。图1-5 当异步脉冲宽度大于时钟周期时的同步器电路同步器的Verilog HDL 代码:module synch(asynch_in,clk,reset,synch_out);/同步器;input asynch_in,clk,reset;output synch_out;wire a;d_ff u1(.d(asynch_in),.reset(reset),.clk(clk),.q(a);d_ff u2(.d(a),.reset(reset),.clk(clk),.q(synch_out);endmodulemodule d_ff(d,reset,clk,q);/D触发器;input d,reset,clk;output reg q;always(posedge clk or posedge reset)/异步复位;高电平有效;begin if(reset) begin q=0;end else begin q=d;endendendmodule (ii)开关防颤动电路的设计(a)开关的颤动即开关防颤动电路的功能人们完成一次按键操作的指压力如图1-6(b)所示,按键开关从最初按下到接触稳态需要经过数毫秒的颤动,按键松开时也有同样的问题。因此,按键被按下或释放时,都有几毫秒的不稳定输出,从逻辑电平来看不稳定输出期间,其电平在“0”、“1”之间无规则摆动。因此,一次按键操作的输出如图1-6(c)所示。一般情况,按键一次时间大于100ms,颤动时间(按下或释放)小于10ms。开关防颤动电路的目的是:按一次按键,输出一个稳定的脉冲,即将开关的输出作为开关防颤动电路的输入,而开关防颤动电路的输出作为理想输出,如图1-6(d)所示。(b)开关防颤动电路的设计开关防颤动电路的关键是避免在颤动期采样。颤动期时间长短与开关类型及按键指压力有关,一般为10ms左右。据此可以画出防颤动电路的设计流程图,如图1-7所示。图1-8所示为防颤动电路的原理框图。综合原理框图和工作流程图可画出控制器的算法流程图和状态机图,如图1-9,图2-0所示。10ms定时器图1-8 所示为防颤动电路的原理框图。控制器ensys_clkresettimer_clrtimer_doneVo分频器()pulse400Viclkcintimer_doneen定时器qouttimer_clr(iii)定时器的设计图1-9 定时器框图定时器实质上就是计数器,基本框图如图1-9所示,但定时器需一个启动信号timer_clr和一个定时到信号timer_done。其功能特性见表2-0所示。定时计数器的模N的选取:1、若用clk作时间基准:NT/Tclk,T为定时时间,Tclk为时钟周期。2、若用cin作时间基准(cin的脉冲宽度为Tcin):NT/Tcin,T为定时时间,Tcin为输入信号cin的周期。表2-0 定时器功能表timer_clrcinclkqout功能1X=0清零(启动)00=qout保持01=qout+1计数图2-1 控制器的算法流程图图1-7 防颤动电路的工作流程图图2-2 防颤动电路控制器的ASM图防抖动电路的Verilog HDL 代码:module debouncer(clk,reset,vi,vo);/防抖动电路顶层模块input clk,reset,vi;output vo;div u1(.sys_clk(clk),.sec(),.scan(pulse400);time_n u2(.cin(pulse400),.clk(clk),.time_clr(b),.time_done(c);control u3(.clk(clk),.vi(vi),.time_done(c),.reset(reset),.time_clr(b),.vo(vo);endmodulemodule time_n(cin,clk,time_clr,time_done);/计时器parameter n=8;parameter counter_bits=3;output time_done;input cin,clk,time_clr;reg counter_bits:1qout;assign time_done=(qout=(n-1)&cin;/进位always(posedge clk)begin if(time_clr) qout=0;/清零else if(cin)begin if(qout=(n-1) qout=0;else qout=qout+1;/计数end endendmodulemodule div(sys_clk,sec,scan);/16分频input sys_clk;output sec,scan;div_n1 u1(.cout(scan),.cin(1b1),.clk(sys_clk);div_n2 u2(.cout(sec),.cin(scan),.clk(sys_clk);endmodulemodule control(clk,vi,time_done,reset,time_clr,vo);/控制器input clk,vi,time_done,reset;output vo,time_clr;reg vo,time_clr;reg1:0 state;parameter high=2b00,wait_low=2b01,low=2b11,wait_high=2b10;/状态以格雷码编码always(posedge clk )begin if(reset) state=high;else case(state)high:begin if(!vi) state=wait_low; else state=high;endwait_low:begin if(time_done) state=low; else state=wait_low;endlow:begin if(vi) state=wait_high; else state=low;enddefault: begin if(time_done) state=high; else state=wait_high;end endcaseendalways(*)begin case (state)high: begin time_clr=1b1;vo=1b0; endwait_low: begin time_clr=1b0;vo=1b1; endlow: begin time_clr=1b1;vo=1b1; enddefault: begin time_clr=1b0;vo=1b1; endendcaseendendmodule (iv)脉宽变换电路的设计开关或按键的输入信号宽度远远大于一个时钟周期,脉宽变换电路的作用是将输入信号宽度变换为一个时钟周期。由于输入已是同步的且宽度大于一个时钟周期的脉冲,所以脉宽变换电路的原理图如图2-3所示。clkinout&D Q图2-3 脉宽变换电路脉宽变换电路的Verilog HDL 代码:module transf(in,clk,out,reset);/脉宽变换模块input in,clk,reset;output out;wire b;d_ff u0(.d(in),.reset(reset),.clk(clk),.q(b);/调用D触发器模块assign out=!b∈endmodule(3)计时模块计时模块可由1个十进制计数器(十分之一秒计时)、1个六十进制BCD码秒计数器和1个六十进制BCD分计数器级联而成。计时模块的输入控制信号clear、count和stop为互斥信号。计时模块的原理框图如图2-4所示,其功能如表2-5所示。en co六十进制BCD码计数器en co六十进制BCD码计数器en co十进制BCD码计数器pulse10Hz sec minqssqmqs sys_clk图2-4 计时模块的原理框图clearstopcountpulseclk功能1同步清零010保持0010保持0011计数表2-5 计时模块功能表计时模块的Verilog HDL 代码:module counter(clear,count,stop,sys_clk,sec,qss,qs,qm);/计时模块顶层;input clear,count,stop,sec,sys_clk;output 3:0 qss;output 7:0 qs,qm;bcd_10 u1(.qout(qss),.cout(second),.cin(sec&count&stop),.reset(clear),.clk(sys_clk); /计数器级联;bcd1_60 u2(.qout(qs),.cout(min),.cin(second),.reset(clear),.clk(sys_clk);bcd1_60 u3(.qout(qm),.cout(),.cin(min),.reset(clear),.clk(sys_clk);endmodulemodule bcd1_60(qout,cout,cin,reset,clk);/六十进制BCD计数器;parameter n=90;/BCD码01100000的十进制数值;output7:0 qout;reg 7:0 qout;output cout;input cin,reset,clk;assign cout=(qout=(n-1)&cin;/进位;always (posedge clk )begin if(reset)/ 同步复位,高电平有效;qout=0;else if(cin)begin if(qout=(n-1) qout=0;else if(qout3:0=9)beginqout3:0=0;qout7:4=qout7:4+1;/高位BCD码计数;endelse qout3:0=qout3:0+1;/低位BCD码计数;endendendmodulemodule bcd_10(qout,cout,cin,reset,clk);/十进制BCD计数器;parameter n=10;output reg3:0 qout;output cout;input cin,reset,clk;assign cout=(qout=(n-1)&cin;/进位;always (posedge clk )begin if(reset)/同步复位,高电平有效;qout=0;else if(cin)begin if(qout=(n-1) qout=0;else qout3:0=qout3:0+1;/计数;endend endmodule(5)控制器模块控制器模块的Verilog HDL 代码:图2-6 控制器的ASM图Resetclear=1,count=0,stop=0StartNTimingEndYNNYYButtonOut?控制器是电路的核心,在按键的控制下,输出clear、count和stop三个控制信号分别控制计时模块的工作状态。控制器的算法流程图如图2-6所示,Reset、Timing、End分别代表秒表的初始、计时和停止三个状态。ButtonOut?clear=0,count=0,stop=1ButtonOut?clear=0,count=1,stop=0 module control_16(sys_clk,buttonout,clear,count,stop,start);/控制器input sys_clk,buttonout,start;output clear,count,stop;reg clear,count,stop;reg 1:0state;parameter reset=2b00,timing=2b01,End=2b11; /格雷码编码;always (posedge sys_clk)begin if(start) state=reset; /进入状态reset;else case(state) /状态转换;reset:begin if(buttonout) state=timing; else state=reset;endtiming:begin if(buttonout) state=End; else state=timing;enddefault:begin if(buttonout) state=reset; else state=End;endendcaseendalways (*)begin case(state) reset: begin clear=1b1;count=1b0;stop=1b0;end timing: begin clear=1b0;count=1b1;stop=1b0;end default: begin clear=1b0;count=1b0;stop=1b1;end endcase endendmoduleP.13 (6)显示模块显示采用数码管动态显示技术,即所有数码管公用一组数据线(ag),数码管轮流被点亮。因此,动态显示驱动方式中每一个数码管都要有一个点亮控制输入端,该端口即为数码管的共阴极端或共阳极端。XUP Virtex-II Pro 开发系统没有提供数码显示功能,可用自制扩展板上的6位动态显示数码管来显示“0.1秒”、“秒”、“分”。动态显示电路的原理框图如图2-7所示。“0.1秒”、“秒”、“分”共有5为BCD码需显示。五进制计数器状态q控制数据选择器一次选出当前显示的BCD码(data)送入到显示译码器。计数器状态q同时表征显示在那个数码管上,通过二进制译码器输出position控制对应的数码管点亮。4 mux3210 selqm7:4显示译码器agdataqm3:0qs7:4qs3:0qss3:0显示模块的Verilog HDL 代码:module display(scan,sys_clk,qss,qs,qm,position,a,b,c,d,e,f,g,dp);/显示器模块顶层;input scan,sys_clk;input3:0 qss;input7:0 qs,qm;output a,b,c,d,e,f,g,dp;/dp为小数点显示;output 4:0 position;wire 2:0q;wire 3:0data; counter_5 u1(.q(q),.reset(1b0),.clk(sys_clk),.cin(scan);/按原理框图级联; decoder3_5 u2(.q(q),.position(position); mux_5 u3(.data(data),.sel(q),.qm(qm),.qs(qs),.qss(qss); decode4_7 u4(.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g),.data(data);assign dp=position1;/第二位显示小数点;endmodule图2-7 动态显示电路的原理框图position4:0qsys_clkpulse400Hzen五进制计数器二进制译码器 P.14 module counter_5(q,reset,clk,cin);/5位计数器parameter N=3;outputN-1:0 q;/输出三位二进制书q;input reset,clk,cin;regN-1:0 q;always (posedge clk )begin if (reset) q=0;else if(cin)begin if(q=4) q=0; else q=q+1;end/进位;endendmodule module decoder3_5(q,position);/3-5译码器input2:0 q;output reg4:0 position;always (q)begin case(q)/用case语句进行译码;3b000:position=5b00001;/点亮第1位;高电平有效;3b001:position=5b00010; /点亮第2位;高电平有效;3b010:position=5b00100; /点亮第3位;高电平有效;3b011:position=5b01000; /点亮第4位;高电平有效;3b100:position=5b10000; /点亮第5位;高电平有效;default:position=5b00000; /全灭;endcaseendendmodulemodule mux_5(data,sel,qm,qs,qss);/选择器;input7:0 qm,qs;input3:0 qss;input2:0 sel;output reg3:0 data;always (qss or qs or qm or sel)begincase(sel)3b000:data=qss;3b001:data=qs3:0;3b010:data=qs7:4;3b011:data=qm3:0;3b100:data=qm7:4;endcaseendendmodulemodule decode4_7(a,b,c,d,e,f,g,data); /BCD码7段数码管译码器;input 3:0data; /输入的四位BCD码;output reg a,b,c,d,e,f,g;always(data)begin case(data) /使用case语句进行译码; 4d0:a,b,c,d,e,f,g=7b0000001; /显示0;共阳接法,低电平有效; 4d1:a,b,c,d,e,f,g=7b1001111; /显示1; 4d2:a,b,c,d,e,f,g=7b0010010; /显示2; 4d3:a,b,c,d,e,f,g=7b0000110; /显示3; 4d4:a,b,c,d,e,f,g=7b1001100; /显示4; 4d5:a,b,c,d,e,f,g=7b0100100; /显示5; 4d6:a,b,c,d,e,f,g=7b0100000; /显示6; 4d7:a,b,c,d,e,f,g=7b0001111; /显示7; 4d8:a,b,c,d,e,f,g=7b0000000; /显示8; 4d9:a,b,c,d,e,f,g=7b0000100; /显示9; default:a,b,c,d,e,f,g=7b0000001; /其他均显示0; endcaseendendmodule(7)顶层模块按图1-2 将各个模块级联起来,得到秒表系统的top文件。module lab_16(clk,buttonin,a,b,c,d,e,f,g,dp,position);input clk,buttonin;output a,b,c,d,e,f,g,dp;output 4:0position;wire 3:0qss;wire 7:0qs,qm;VgaDCM DCMInst( /DCM模块;.CLKIN_IN(clk),.CLKDV_OUT(sys_clk),.CLKIN_IBUFG_OUT(),.CLK0_OUT(),.LOCKED_OUT();div u1(.sys_clk(sys_clk),.sec(pulse10),.scan(pulse400);/分频器模块;debouncer_1 u2(.up(buttonin),.clk(sys_clk),.out(buttonout);/防抖动电路模块;control_16 u3(.sys_clk(sys_clk),.buttonout(buttonout),/控制器模块;.clear(clear),.count(count),.stop(stop),.start(1b0);counter u4(.clear(clear),.count(count),.stop(stop),.sys_clk(sys_clk),/计时器模块;.sec(pulse10),.qss(qss),.qs(qs),.qm(qm);display u5(.scan(pulse400),.sys_clk(sys_clk),.qss(qss),.qs(qs),.qm(qm),/显示模块;.position(position),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g),.dp(dp);endmodule三、主要仪器设备(1)装有ISE、ModelSim SE 和ChipScope Pro软件的计算机。(2)XUP Virtex-II Pro 开发系统一套。(3)DigitIO扩展板一块。四、操作方法和实验步骤(1)编写按键处理模块、分频器模块、控制器模块、计时模块和显示模块的Verilog HDL 代码及其测试(2)代码,并用ModelSim仿真。(3)生成系统所需的DCM内核。(4)编写秒表系统的top文件,建立秒表系统的ISE工程文件。(5)对工程进行综合、约束、实现并下载至实验开发板中。FPGA引脚约束内容如表1-1所示。(6)接通扩展版电源,进行秒表的功能测试,验证设计是否符合要求。引脚名称I/O引脚编号说明clkInputAJ15系统主100MHz时钟ButtonInInputAG5Enter按键aOutputP7七段码bOutputP3cOutputP2dOutputR7eOutputP4fOutputT2gOutputR5position0OutputN65个数码管的点亮控制端position1OutputL5position2OutputM2position3OutputP9position4OutputM4dpOutputR3小数点表2-8 FPGA引脚约束内容五、实验数据记录和分析(1)分频器测试代码:timescale 1ns/100psmodule div_tb;reg sys_clk;wire sec,scan;div dut(.sys_clk(sys_clk),.sec(sec),.scan(scan);initial beginsys_clk = 0;#(1*1000000000) $stop;endalways #80 sys_clk=sys_clk; endmodule图2-9 分频器测试仿真波形(1)图3-0 分频器测试仿真波形(2)图2-9、3-0、3-1都是分频器测试仿真波形,在波形(2)中可以看出信号scan的周期为2ps,即2.5ms,转换为频率为400Hz,与分频的设计要求一致。波形(3)为波形的进一步放大,可以清晰的看到信号sec的周期为1ps,即为0.1s,频率为10Hz,与设计要求一致。图3-1 分频器测试仿真波形(3)(2)按键处理模块测试代码timescale 1us / 1nsmodule debouncer1_tb;reg clk,up;wire out;parameter delay=1000;/1msinitial beginclk=0;up=1;#5000 repeat (23) begin #110 up=1; #110 up=0; end#(delay*100) repeat (28) begin #110 up=0; #110 up=1; end#(delay*20) #200 $stop;endalways #80 clk=clk;debouncer_1 test(.up(up),.clk(clk),.out(out);endmodule图3-2 防抖动电路仿真波形(1)约为12ms图3-3局部放大波形从图3-2 、3-3的防抖动电路仿真波形可以看出,在输入高低电平不断变化的情况下,输出总是保持在一个稳定的“高电平”状态,达到了电路消抖的目的。控制器模块测试代码:timescale 1ns/100psmodule control_16_tb;reg sys_clk,buttonout,start;wire clear,count,stop;parameter dely=160;control_16 test(.sys_clk(sys_clk),.buttonout(buttonout),.clear(clear),.count(count),.stop(stop),.start(start);initial sys_clk=0;always #(dely/2) sys_clk=sys_clk;initialbegin start=1;buttonout=0; #dely start=0;buttonout=1; #(dely*10) buttonout=0; #(dely*5) buttonout=1; #(dely*8) buttonout=0; #(dely*5) buttonout=1; #(dely*5)$stop;endendmodule图3-4 控制器模块仿真波形从图3-4中可以看出,只要buttonout处于高电平,输出信号clear、count、stop按时钟周期依次输出,在一个时钟周期内三个信号总只有一个是高电平,为互斥信号。对比图2-6控制器的流程图,仿真波形与控制设计要求一致。计时模块测试代码timescale 1ns/100psmodule count_tb;reg clear,count,stop,sec,sys_clk;wire 3:0 qss;wire 7:0 qs,qm;parameter dely=100;counter test(.clear(clear),.count(count),.stop(stop),.sys_clk(sys_clk),.sec(sec),.qss(qss),.qs(qs),.qm(qm);initial sys_clk=0;always #(dely/2) sys_clk=sys_clk;initialbegin clear=1;count=0;stop=0;sec=0; #dely clear=0;count=0;stop=1;sec=1; #(dely*100) clear=0;count=1;stop=0;sec=1; #(dely*130) clear=0;count=1;stop=0;sec=0; #(dely*300) clear=1;count=1;stop=0;sec=1; #(dely*500) clear=0;count=1;stop=0;sec=1; #(dely*200) clear=0;count=1;stop=0;sec=0; #(dely*250) clear=0;count=1;stop=0;sec=1; #(dely*200) sec=0; #(dely*300) clear=0;count=0;stop=1;sec=1; #(dely*100) clear=0;count=1;stop=0;sec=1; #(dely*500) clear=0;count=0;stop=1;sec=0; #(dely*200)$stop; endendmodule 图3-5 计时器模块仿真波形(1)图3-6 计时器模块仿真波形(2)图3-5、3-6为计时器模块的仿真波形,从放大的波形(2)可以看到十进制BCD码计数器、六十进制BCD码计数器(1)、六十进制BCD码计数器(2)满足互相级联的关系。当十进制BCD码计数器进位时,六十进制BCD码计数器(1)计数;当六十进制BCD码计数器(1)进位时,六十进制BCD码计数器(2)计数。六、实验心得、体会通过这次数电实验,基本掌握了Verilog HDL代码的语法,会编写一些基本模块的Verilog HDL代码,及其测试代码的,比如任意进制计数器、分频器、计时器、控制器、还有一些基本的组合电路。以下是我对Verilog HDL代码的一些认识总结,以及在软件仿真、综合实现过程中遇到的一些问题和解决办法。1、Verilog HDL代码的一些认识总结:在Verilog HDL代码中的变量有两种数据类型:net类型和variable类型。用的平常的数据类型有net型中的wire和variable类中reg。reg型必须放在过程块语句中。在编写Verilog HDL代码是,模块的输入变量默认为wire类型,不需要重新声明。在模块级联时,中间变量的数据类型为wire型,因为级联是线性的。一般的过程块语句有:initial和always语句。initial过程块中的语句只执行一次,一般用于仿真中的变量初始化。always过程块中的语句则是不断重复执行的。赋值语句也分为两种:assign为持续赋值语句,主要用于对wire型变量的赋值;过程赋值语句多用于对reg型变量进行赋值。过称赋值有阻塞赋值和非阻塞赋值两种方式。在ise综合中,一个过程块语句中只能使用一种赋值语句,及阻塞赋值和非阻塞赋值不能混用,否则ise的综合通不过。模块与模块之间的级联时,在顶层文件中各模块的模块声明必须与调用的模块声明一致。为防止写错,建议使用复制粘贴的方式,避免出现一些细小有事关重大的语法错误。对于级联中的一些中间变量数据长度,默认为一位。通过编写控制器的代码,对状态图及状态转换有了深刻的认识,能够根据状态图或状态机图编写Verilog HDL代码。一般有单过程描述和双过程描述方式。在数据选择器模块中,用case语句能简洁的实现预想的功能。2、实验过程中遇到的问题及解决办法(1)BCD计数器代码编写问题十进制BCD码编写没有问题,而六十进制BCD码计数器的编写过程中没有注意到计算机运行的事二进制代码。因而六十进制的模60 转换为BCD码为01100000,在计算机“看来”是二进制代码。转换为十进制数是90 ,故在模块的变量模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论