当前位置:文档之家› Verilog HDL经典程序

Verilog HDL经典程序

Verilog HDL经典程序
Verilog HDL经典程序

一、2线-4线译码器

module counter4(q1,q0,ncr,cp); input cp,ncr;

output q1,q0;

reg q1,q0;

always@(posedge cp or negedge ncr)

begin

if(~ncr){q1,q0}<=2'b00;

else {q1,q0}<={q1,q0}+1'b1; end

endmodule

二、4选1数据选择器

module

selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0;

output y;

reg y;

always@(a1 or a0)

begin

case({a1,a0})

2'b00:y=i0;

2'b01:y=i1;

2'b10:y=i2;

2'b11:y=i3;

default:y=0;

endcase

end

endmodule

三、8线-3线优先编码器module encoder8_3(i,y,ei,eo,gs); input [7:0] i;

input ei;

output [2:0] y;

output eo;

output gs;

reg [2:0]y;

reg eo,gs;

always@(ei or i)

begin

if(ei==1'b1)

begin

{y,eo,gs}=5'b111_11;

end

else if(i[7:0]==8'b1111_1111)

begin

{y,eo,gs}=5'b111_01;

end

else if(i[7]==1'b0)

begin

{y,eo,gs}=5'b000_10;

end

else if(i[6]==1'b0)

begin

{y,eo,gs}=5'b001_10;

end

else if(i[5]==1'b0)

begin

{y,eo,gs}=5'b010_10;

end

else if(i[4]==1'b0)

begin

{y,eo,gs}=5'b011_10;

end

else if(i[3]==1'b0)

begin

{y,eo,gs}=5'b100_10;

end

else if(i[2]==1'b0)

begin

{y,eo,gs}=5'b101_10;

end

else if(i[1]==1'b0)

begin

{y,eo,gs}=5'b110_10;

end

else if(i[0]==1'b0)

begin

{y,eo,gs}=5'b111_10;

end

end

endmodule

四、模10加法计数器和一个时

钟10分频电路

1、模10加法计数器cnt_10的

Verilog代码

module

count_10(clk,reset,dout);

input clk;

input reset;

output[3:0] dout;

reg[3:0] dout;

always@(posedge clk or negedge

reset)

begin

if(~reset)

dout<=4'b0000;

else

if(dout<4'b1001)

dout<=dout+1;

else

if(dout==4'b1001)

dout<=4'b0000;

end

endmodule

2、10分频模块fenpin_10的

Verilog代码

module

fenpin_10(clk_in,reset,clk_out);

input clk_in;

input reset;

output[0:0] clk_out;

reg[0:0] clk_out;

reg[3:0] count;

always@(posedge clk_in or

negedge reset)

begin

if(~reset)

count<=4'b0000;

else

if(count<4'b1001)

count<=count+1;

else

if(count==4'b1001)

begin

count<=4'b0000;

clk_out<=~clk_out;

end

end

endmodule

五、10110101序列发生器

module generator(clk,

clr,

dout);

input clk;

input clr;

output dout;

reg dout;

reg [7:0] temp;

always@(posedge clk or negedge clr)

begin

if(~clr)

begin

dout<=1'b0;

temp<=8'b10110101;

end

else

begin

temp<=temp<<1;

temp[0]<=temp[7];

dout<=temp[7];

end

end

endmodule

六、利用状态机设计一个1011序列检测器

module

detec1101(clk,reset,din,get1101); input clk;

input reset;

input din;

output get1101;

reg get1101;

reg [2:0]current_state;

reg [2:0]next_state;

parameter IDLE=3'b000,

S1=3'b001,

S2=3'b010,

S3=3'b100,

s4=3'b100; always@(posedge clk or negedge reset)

begin

if(~reset)

current_state<=IDLE;

else

current_state<=next_state;

end

always@(din or current_state or next_state)

begin

next_state=3'b111;

case(current_state)

IDLE:next_state=(din==1'b1) ?S1:IDLE;

S1:next_state=(din==1'b1)? S2:IDLE;

S2:next_state=(din==1'b1)? S2:S3;

S3:next_state=(din==1'b1)? s4:IDLE;

s4:next_state=(din==1'b1)? S1:IDLE;

default:next_state=IDLE;

endcase

end

always@(posedge clk)

begin

case(next_state)

s4:get1101<=1'b1;

IDLE,S1,S2,S3:get1101<=1'b 0;

default:get1101<=1'b0;

endcase

end

endmodule

Verilog~HDL~电梯程序

这个程序不需要你再添加任何的程序,你只需要添加楼层数就可以成功控制6层以上电梯,另外你必须得读懂每一块程序的作用,才能对这个程序有更好的应用 module dtsj(clk,reset,up1,up2,up3,up4,up5,dn2,dn3, dn4,dn5,dn6,d1,d2,d3,d4,d5,d6,overw,pro,led,hex,Buzzer1,lig); input clk,reset; //reset键使用key input overw,pro,up1,up2,up3,up4,up5,dn2,dn3,dn4,dn5,dn6,d1,d2,d3,d4,d5,d6; //故障警报键 output[6:0] hex,lig; //light和led用数码管 output[5:0] led; output Buzzer1; reg Buzzer1,door; reg[6:0] hex,lig; reg[2:0]state,next_state,count; reg[5:0] d,up,dn,now_f,curr,led; //d是部按键,up外部上升按键,dn是外部下降按键, //now_f是当前楼层,curr是当前楼层的另外一个变量 reg[1:0] ud_f; //上升下降标志位 reg light; //reg[29:0] counter; //regclkout; parameter idle_state=3'b001,open_state=3'b010,close_state=3'b011, up_state=3'b100,down_state=3'b101,sleep_state=3'b110, alarm_state=3'b111,f1=6'b000001,f2=6'b000010,f3=6'b000100,f4=6'b001000 ,f5=6'b010000,f6=6'b100000,up_f=2'b01,dn_f=2'b10,idle=2'b00; //jiuzhongzhuangtai he shang sheng zhuang tai 'shang sheng zhuang tai he xiajiazhuang tai initial begin state<=idle_state; end always (posedgeclk or posedge reset) if(reset) state<=idle_state; else state<=next_state; always (state or up or dn or d or now_f or count or ud_f) case(state) open_state: begin if(count<5)

VerilogHDL经典程序非常适合新手

一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0; 2'b01:y=i1; 2'b10:y=i2; 2'b11:y=i3; default:y=0; 一、2线-4线译码器 module counter4(q1,q0,ncr,cp); input cp,ncr; output q1,q0; reg q1,q0; always@(posedge cp or negedge ncr) begin if(~ncr){q1,q0}<=2'b00; else{q1,q0}<={q1,q0}+1'b1; end endmodule 二、4选1数据选择器 module selector4_1(i0,i1,i2,i3,a1,a0,y); input i0,i1,i2,i3,a1,a0; output y; reg y; always@(a1or a0) begin case({a1,a0}) 2'b00:y=i0;

VerilogHDL实例

本文档含有很多Verilog HDL例子://与门 module zxhand2(c,a,b); input a,b; output c; assign c= a & b; endmodule //或门 module zxhor2(c,a,b); input a,b; output c; assign c= a | b; endmodule //非门 module zxhnot2(c,b); input b; output c; assign c=~ b; endmodule ////异或门 module zxhxro2(c,a,b); input b; output c; assign c=a ^ b; endmodule 两选一电路 module data_scan(d0,d1,sel,q); output q; input d0,d1,sel; wire t1,t2,t3; n1 zxhand2(t1,d0,sel); n2 zxhnot2 (t4,sel); n3 zxhand2(t2,d1,t4); n4 zxhor2(t3,t1,t2);

assign q=t1; endmodule verilog HDL实例(一) 练习一.简单的组合逻辑设计 目的: 掌握基本组合逻辑电路的实现方法。 这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。在Verilog HDL中,描述组合逻辑时常使用assign结构。注意 equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。 模块源代码: //--------------- compare.v ----------------- module compare(equal,a,b); input a,b; output equal; assign equal=(a==b)?1:0; //a等于b时,equal输出为1;a不等于b时, //equal输出为0。 endmodule 测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。 测试模块源代码: `timescale 1ns/1ns //定义时间单位。 module comparetest; reg a,b; wire equal; initial //initial常用于仿真时信号的给出。 begin a=0; b=0; #100 a=0; b=1; #100 a=1; b=1; #100 a=1; b=0; #100 $stop; //系统任务,暂停仿真以便观察仿真波形。 end compare compare1(.equal(equal),.a(a),.b(b)); //调用模块。 Endmodule

数电实验考试 verilogHDL语言及参考程序

题目一:表决器电路设计 一、设计任务及原理:所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。 七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。实验中用7个拨动开关来表示七个人,当对应的拨动开关输入为‘1’时,表示此人同意;否则若拨动开关输入为‘0’,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮。同时,数码管上显示通过的票数。 二、具体要求: 本实验就是利用实验系统中的拨动开关模块和LED模块以及数码管模块来实现一个简单的七人表决器的功能。拨动开关模块中的K1~K7表示七个人,当拨动开关输入为‘1’时,表示对应的人投同意票,否则当拨动开关输入为‘0’时,表示对应的人投反对票;LED模块中LED1表示七人表决的结果,当LED1点亮时,表示此行为通过表决;否则当LED1熄灭时,表示此行为未通过表决。同时通过的票数在数码管上显示出来。 在此实验中数码管、LED、拨动开关与FPGA的连接电路和管脚连接使用模块 信号 对应FPGA 管脚 说明

在以前的实验中都做了详细说明,这里不在赘述。端口名 S1 按键开关 S1 R16 表示1号抢 答者 S2 按键开关 S2 P14 表示2号抢 答者 S3 按键开关 S3 P16 表示3号抢 答者 S4 按键开关 S4 P15 表示4号抢 答者 S5 按键开关 S5 M15 表示5号抢 答者 S6 按键开关 S6 N16 表示6号抢 答者 S7 按键开关 S7 N15 表示7号抢 答者 DOUT0 LED模块D1 L14 表决结果 亮为通过 LEDAG0 数码管模 块A段N4 抢答成功 者 号码显示 LEDAG1 数码管模 块B段 G4

用veriloghdl设计计数器

用Verilog HDL设计计数器 一、实验目的 1. 学习使用Verilog HDL语言,并学会使用进行QuartusⅡ软件编 程和仿真; 2. 掌握数字电路的设计方法,熟悉设计过程及其步骤; 3. 培养学生的动手能力,能学以致用,为今后从事电子线路设计 打下良好基础; 4. 巩固加深对数电知识的理解,在仿真调试过程中,能结合原理 来分析实验现象; 二、实验内容 1.设计内容及要求 1)利用Verilog HDL设计一个以自己学号后三位为模的计数器; 2)编写源程序; 3)给出仿真电路图和仿真波形图; 2.需求分析: 由于本人的学号后3位为212,所以应编一个以212为模的加法计数器。若采用同步清零的方法,则计数为0~211,化为二进制数即为0 0000 0000计到0 1101 0011。 3.编写源代码: module count_212(out,data,load,reset,clk);

output [8:0] out; input [8:0] data; input load,reset,clk; reg [8:0] out; always @(posedge clk) + A[8..0] B[8..0] ADDER < CIN A[8..0] B[8..0] LESS_THAN 1 D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR D ENA Q PRE CLR SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 SEL DATAA DATAB OUT0 MUX21 Les s Than0 9' h0D3 -- out[0]~reg0 out[1]~reg0 out[2]~reg0 out[3]~reg0 out[4]~reg0 out[5]~reg0 out[7]~reg0out[8]~reg0 out~[8..0] 9' h000 -- res et clk out[8..0] data[8..0] out~[26..18] 9' h000 -- out~[17..9] load out[6]~reg0A dd0 9' h001 --

常用VerilogHDL 语法总结

常用VerilogHDL 语法总结 1 模块 (1)端口定义:声明模块的输入输出口。引用模块时端口的两种连接方法。 (2)模块内容:I/O说明(输入输出)、内部信号说明(和端口有关的变量说明)、功能定义(定义逻辑功能的三种方式:assign 声明语句;实例元件;always 块)。 (3)理解要点:整体语句并发执行,always块内顺序执行。 2 常量 (1)数字:整数及三种表达方式 x和z值 负数:减号的位置 下划线:位置和作用 (2)参数:parameter符号常量,常用于定义延迟时间(使用#)和变量宽度。 3 变量 (1)wire:表示易assign指定的组合逻辑信号;默认值;任何方程式的输入或assign语句及实例元件的输出;定义格式。(2)reg:表示always块中指定的信号,代表触发器;寄存器数据类型(触发器存储值),默认值为x;定义格式。 (3)memory:reg的数组;描述RAM、ROM、reg文件;单元索引;一个n为寄存器和n个一位数组的区别。 4 运算符与表达式 (1)算术运算符:五种 (2)位运算符:五种 (3)逻辑运算符:三种 (4)关系运算符:四种(3种不同的返回值) (5)等式运算符:四种 (6)移位运算符:两种(移位补零) (7)位拼接运算符:{},常用于某些控制信号位;重复与嵌套使用 (8)缩减运算符:类似于逻辑运算符,结果为一位二进制数(9)运算符优先级 5 语句 (1)赋值语句 阻塞赋值:b<=a;块结束后完成赋值,b的值不是立即改 变的,较为常用; 非阻塞赋值:b=a;赋值语 句执行后块才结束,b的值马上 改变,在沿触发的always块中 使用可能引起错误后果。 (2)块语句 顺序块begin-end:顺序执 行,最后语句执行完流程跳出语 句块; 并行块fork-join:同时执 行,时间最长语句执行完或 disable语句执行时跳出程序 块; 块名的作用; 起始时间和结束时间 (3)条件语句 If-else语句:三种形式; if表达式判断;分号;复合语句; 表达式简写;if语句嵌套;if 与else的配对。 Case语句:三种形式 (casez:不考虑z进行比较, casex:不考虑z和x进行比较); 控制表达式与分支表达式(常量 表达式);default;所有表达式 的位宽必须相等。 条件语句使用不当造成锁 存器:避免错误:case中使用 default,if必须搭配else。 (4)循环语句 Forever:格式;连续执行; Repeat:格式;连续执行n 次;表达式通常为常量表达式; While:格式;执行语句至 条件不满足; For:格式:for(循环变量 初值;循环结束条件;循环变量 增值)。 (5)结构说明语句 Initial:格式;执行一次; 常用来变量初始化和生成激励 波形作为电路的测试仿真信号; Always:格式;执行至仿真 结束;注意时序;常用来描述时 钟信号作为激励信号;时间控制 可以为沿触发(描述时序行为) 也可以是电平触发(描述组合逻 辑行为); Task:定义;任务的调用与 变量的传递;任务调用变量与任 务定义的I/O变量必须一一对 应; Function:定义;函数返回 值(函数定义蕴含定义了同名寄 存器);函数调用通过函数表达 式中的操作数来实现的。 (6)时间控制语句 #、@、wait标识的语句 6 系统函数和任务 (1)$display和$write:输出 信息;格式说明和普通字符; (2)$monitor:监控和输出参 数列表中的表达式和变量值;关 闭与打开控制; (3)$time:返回64位整数表 示当前仿真时刻值;时间尺度; $realtime:返回时间为实 型数; (4)$finish:退出仿真器,返 回主操作系统;参数; (5)$stop:把EDA工具设置为 暂停,给出交互命令提示,把控 制权交给用户; (6)$readmemb 和$readmemh: 从文件读取数据到存储器;格 式;读取内容; (7)$random:返回32位带符 号整型随机数;用于产生随即脉 冲序列和宽度随机的脉冲序列 进行电路测试。 7 编译预处理 (1)`define:宏定义,符号常 量; (2)`include:文件包含;使 用形式; (3)`timescale:时间尺度, 说明跟在该命令后的模块的时 间单位和时间精度; (4)`ifdef、`else、`endif: 满足条件的语句进行编译;不编 译的部分也应符VerilongHDL语 言规范。

1、VerilogHDL设计流程

1、Verilog HDL 设计流程: 1、文本编辑:文件保存为.v的文件; 2、功能仿真:将.v文件调入HDL仿真软件,逻辑功能是否正确(前仿真); 3、逻辑综合:将源文件调入逻辑综合软件进行综合,把语言综合成最简的布尔表达式,生成.edf的EDA工业标准文件;矚慫润厲钐瘗睞枥庑赖。 4、布局布线; 5、时序仿真:验证电路的时序(后仿真)。 2、Verilog 程序包括四部分: 1、端口定义 2、I/O口说明 3、内部信号声明 4、功能定义 3、逻辑功能定义: 三种方法在模块中产生逻辑: (1)用assign 声明语句;如assign a = b & c;(描述组合逻辑) (2)用实例元件;如and #2 u1(q,a,b); (3)用always块;如(既可描述组合逻辑也可描述时序逻辑) always @ (posedge clk or posedge clr) begin if(clr) q <= 0; else if(en) q <= d; end 4、网络类型变量 两种:wire tri Wire型变量:用来表示单个门驱动或连续赋值语句驱动的网络类型数据。 Tri 型变量:用来表示多驱动器驱动的网络型数据。 线网类型两种:wire tri Tri 主要用于定义三态的线网; Wire型:代表的是物理连接,不存储逻辑值,要由器件驱动,通常用assign进行赋值Wire类型的信号没被驱动,缺省值为Z(高阻);信号没有定义数据类型时,缺省为wire 类型。(缺省==默认)聞創沟燴鐺險爱氇谴净。 Reg型:默认初始值为x,通常用always模块内的指定信号,常代表触发器; always模块内被赋值的每一个信号都必须定义为reg型。(寄存器类型) Verilog HDL 有5种寄存器类型: reg、integer、time、real、realtime 5、运算符号所带操作数 单目运算符:可带一个操作数,操作数放在运算符右边 双目运算符:可带两个操作数,操作数放在运算符两边 三目运算符:可带3个操作数,用三目运算符分隔开 6、底层模块的调用:底层模块(被测试模块)可由测试模块调用 如:(位置关联方式) : AND_G2 AND_G2(A,B,F); 第一个AND_G2 为底层模块名,第二个为实例名,(A,B,F)为参数定义。 语法结构为:底层模块名实例名参数定义

简单自动售货机VerilogHDL程序

自动售货机VerilogHDL程序 一个简单的自动售卖饮料机的程序。该机器具有投币,显示余额,购买六种饮料,退钱等功能,为了更具实用性,增添了饮料选择允许提示和投币允许提示的功能。具体形容,可投入一元、五元、十元和二十元面值的钱币,显示出当前的余额,并根据当前的余额提示能购买哪些饮料,选择某种饮料,则输出选定的饮料,同时余额减去相应的金钱。若选择退钱,机器就退出所有的钱,余额清零。 下图为功能示意图: 程序的状态表:

程序中包含了一个状态机,定义了一个任务(task)和函数(function),用该任务调用了该函数,使用若干分支语句,详见附后源程序和测试程序。 附上程序编译仿真图:

源程序如下: `define one 3'b001 `define five 3'b010 `define ten 3'b011 `define twenty 3'b100 module automart(money,state,moneyout,coinable,adrkable,bdrkable, cdrkable,drkout1,drkout2,drkout3,drkout4,drkout5, drkout6,coin,clk,reset,moneyback,choice1,choice2, choice3,choice4,choice5,choice6); input[2:0] coin;//投币输入,分为1、5、10、20元四种输入 input clk,reset,moneyback,choice1,choice2,choice3,choice4, choice5,choice6;//moneyback为退钱输入,choice1~6是饮料选择output moneyout,coinable,adrkable,bdrkable,cdrkable,drkout1, drkout2,drkout3,drkout4,drkout5,drkout6; //依次为退钱输出,投币许可提示,饮料选择许可,6种饮料输出output[2:0] state;//状态记录 output[7:0] money;//余额显示 reg[7:0] money; reg[2:0] state; reg moneyout,coinable,backable,adrkable,bdrkable,cdrkable; parameter A=3'b000, B=3'b001, C=3'b010,D=3'b011, E=4'b100; assign drkout1=choice1&adrkable;

VerilogHDL试卷及答案

一、选择题: 1、下列标示符哪些是合法的(B ) A、$time B、_date C、8sum D、mux# 2、如果线网类型变量说明后未赋值,起缺省值是(D ) A、x B、1 C、0 D、z 3、现网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是(A )//补 码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! A、4’b1101 B、4’b0011 C、4’bxx11 D、4’bzz11 4、reg[7:0] mema[255:0]正确的赋值是(A ) A、mema[5]=3’ d0, B、8’ d0; C、1’ b1; D、mema[5][3:0]=4’ d1 5、在code模块中参数定义如下,请问top模块中d1模块delay1、delay2的值是( D ) module code(x,y); module top; paramee delay1=1,delay2=1; ……………. ………………………………code #(1,5) d1(x1,y1); endmodule endmodule A、(1,1) B、(5,5) C、(5,1) D、(1,5) 6、“a=4’ b11001,b=4’ bx110”选出正确的运算结果(B ) A、a&b=0 B、a&&b=1 C、b&a=x D、b&&a=x 7、时间尺度定义为timescale 10ns/100ps,选择正确答案(C ) A、时间精度10ns B、时间单位100ps C、时间精度100ps D、时间精度不确定 8、若a=9,执行$display(“current value=%0b,a=%0d”,a,a)正确显示为(B )//去除无效0 A、current value=1001,a=09 B、current vale=1001,a=9 C、1001,9 D、current vale=00…001001,a=9 9、always begin #5 clk=0;#10 clk=~clk;end产生的波形(A )//5占15的1/3 A、占空比1/3 B、clk=1 C、clk=0 D、周期为10 10、在Verilog中定义了宏名`define sum a+b+c 下面宏名引用正确的是(C ) //注意引用 A、out=’sum+d; B、out=sum+d; C、out=`sum+d; D、都正确 二、填空题:(共15分,每小题3分) 1、某一纯组合电路输入为in1,in2和in3,输入出为out,则该电路描述中always的事件表达式应写为 always@(in1,in2,in3 );若某一时序电路由时钟clk信号上升沿触发,同步高电平复位信号rst清零,该电路描述中always的事件表达是应该写为always @( posedge clk )。 //@(条件表达式) do_something; 表示等待条件表达式满足,然后do_something,然后就往下走了。通常用在testbench中,不可综合。 ------------------------------------ always @(a or b or c) begin do_something; end 表示不停地监测a、b、c,一旦它们任何一个发生变化,就立刻do_something,并且这个“监测”是始终存在的。这种电路综合出来时组合逻辑电路。

EDA课程设计报告-用VerilogHDL语言编写-红绿灯控制程序

成绩: XI’AN UNIVERSITY OF TECHNOLOGY EDA综合实践 所在院系自动化与信息工程学院 专业名称电子信息科学与技术 班级电技111 题目红绿灯设计 指导教师XXXX

二、红绿灯原理及设计思路 设计思路: 为了实现两个方向红绿灯循环亮灭的过程,假设该过程如下: 起始(st0)东西方向绿灯亮(green1=1),南北方向红灯亮(red2=1),这个过程持续3个clock周期;然后(st3)东西方向黄灯亮,绿灯灭,南北方向红灯仍然亮着,这个过程持续1个clock;然后(st4)东西方向红灯亮,南北方向绿灯亮,这个过程持续3个clock;然后南北(st7)方向黄灯亮,东西方向红灯仍然亮着,这个过程持续一个clock;接下来就回到起始(st0)的状态进行循环。 此程序中无论哪个方向,各个灯亮着的时间之比为, 绿:黄:红=3:1:4,可以设置clock的值确定各灯具体的亮的时间。 1、红绿灯工作状态的真值表:

2、模型图:(见下页) 3状态机:

三、源程序 module traffic(clock,reset,red1,yellow1,green1,red2,yellow2,green2); input clock,reset; output red1,yellow1,green1,red2,yellow2,green2; parameter st0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6,st7=7; reg[2:0] state,nxstate; reg red1,yellow1,green1,red2,yellow2,green2; always(posedge clock or posedge reset) begin if(reset) state=st0;

数字系统设计与verilogHDL课程设计

数字系统设计与v e r i l o g H D L课程设计设计题目:实用多功能数字钟 专业:电子信息科学与技术 班级:0313410 学号: 姓名:杨存智 指导老师:黄双林 摘要 本课程设计利用QuartusII软件VerilogVHDL语言的基本运用设计一个多功能数字钟,经分析采用模块化设计方法,分别是顶层模块、alarm、alarm_time、counter_time、clk50mto1、led、switch、bitel、adder、sound_ddd、sound_ddd_du模块,再进行试验设计和软件仿真调试,分别实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能。 单个模块调试达到预期目标,再将整体模块进行试验设计和软件仿真调试,已完全达到分块模式设计功能,并达到设计目标要求。 关键字:多功能数字钟、Verilog、模块、调试、仿真、功能 目录

课程设计的目的 通过课程设计的锻炼,要求学生掌握Verilog HDL语言的一般设计方法,掌握Verilog HDL语言的基本运用,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,基于实践、源于实践,实践出真知,实践检验真理,培养学生的创新精神。 掌握现代数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 课程设计的任务与要求 用Verilog HDL语言设计一个多功能的数字钟,具有下述功能: (1)计时功能。包括时、分、秒的计时; (2)定时与闹钟功能:能在设定的时间发出闹铃音; (3)校时功能。对时、分和秒能手动调整以校准时间; (4)整点报时功能;每逢整点,产生“嘀嘀嘀嘀一嘟”四短一长的报时音。 2.课程设计思路及其原理 数字计时器要实现时分秒计时、闹钟闹铃、时分秒手动校时、时分秒清零,时间保持和整点报时等多种基本功能,所有功能都基于计时功能。因此首先需要获得具有精确振荡时间的脉振信号,以此作为计时电路的时序基础,实验中可以使用的振荡频率源为50MHZ,通过分频获得所需脉冲频率1Hz。得到1hz脉冲后,要产生计时模块,必须需要加法器来进行加法,因此需要一个全加器,此实验中设计一个八位全加器来满足要求。 数字电路设计中,皆采用二进制加法,为实现实验中时分秒的最大功能,本实验中采用十六进制加法器,再进行BCD码进行转换来实现正常时钟显示。为产生秒位,设计一个模60计数器,利用加法器对1HZ 的脉冲进行秒计数,产生秒位;为产生分位,通过秒位的进位产生分计数脉冲,分位也由模60计数器构成;为产生时位,用一个模24计数器对分位的进位脉冲进行计数。整个数字计时器的计数部分共包括六位:时十位、时个位、分十位、分个位、秒十位和秒个位。基本的计时模块完成之后,整点报时、清零、校时、LED显示、闹铃模块可以相互实现,其中,闹铃模块与计时模块的显示相互并行。 清零功能是通过控制计数器清零端的电平高低来实现的。只需使清零开关按下时各计数器的清零端均可靠接入有效电平(本实验中是低电平),而清零开关断开时各清零端均接入无效电平即可。 保持功能是通过逻辑门控制秒计数器输入端的1Hz脉冲实现的。正常情况下,开关不影响脉冲输入即秒正常计数,当按下开关后,使脉冲无法进入计数端,从而实现计时保持功能。

verilog HDL抢答器(两个程序)

一、设计任务 智力竞赛抢答器Verilog HDL要求有6位参赛者进行抢答,有六个抢答信号进行抢答。当有抢答选手按下抢答键后系统能够快速准确的判断是那一组选手按下了抢答信号,由于系统比较小,速度比较快一般不会有同时按下的可能,所以只有六种状态,然后系统能够根据这六种状态进行适时的显示和提示。当有选手按下以后就对抢答信号进行锁存,其他选手的输入无效。然后就是对抢答进行时间限制了,根据设定的时间进行倒计时,当倒计时完成还没有人抢答的时候系统发出警报声音提示时间已经到了。当有选手在主持人未按下抢答键抢答时视为超前抢答,系统显示该选手号,同时蜂鸣器响,该抢答无效。还有清除复位键,抢答完成以后按复位键即可清除已有的状态。通过Verilog HDL程序代码实现系统的各个功能。 二、设计目的与要求 目的:理论联系实际,巩固和运用所学课程,提高分析、解决计算机技术实际问题的独立工作能力,培养学生正确的设计思想,严肃认真、实事求是的科学态度和勇于探索的创新精神。通过对一个智力抢答器的设计,进一步加深对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉数字电路系统设计、制作与调试的方法和步骤,通过Verilog 程序的编写,进一步熟悉Verilog HDL 的语法知识;规范化训练学生撰写技术研究报告,提高书面表达能力。 要求: ?掌握FPGA设计系统的一般方法。 ?熟练掌握使用modelsim软件设计较复杂的数字逻辑电路。 ?培养学生独立分析问题和解决实际问题的能力。 三、课程设计的内容 设计一抢答器,要求如下: (1)抢答台数为6; (2)具有抢答开始后20s倒计时,20秒倒计时后6人抢答显示超时,并报警; (3)能显示超前抢答台号并显示犯规报警; (4)系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其 余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。 四、系统设计方案 根据系统设计要求可知,系统的输入信号有:主持人按钮inputEn,各选手的抢答按钮分别是inputL1、inputL2、inputL3、inputL4,inputL5,inputL6,主

VerilogHDL复习题与答案

VerilogHDL硬件描述语言复习 一、 1. Verilog HDL 是在哪一年首次被I E E E标准化的? 答:Verilog HDL是在1995年首次被IEEE标准化的。 2. Verilog HDL支持哪三种基本描述方式? 答:Verilog HDL可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结 构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模 3. Verilog HDL 是由哪个公司最先开发的? 答:Verilog HDL是由Gateway Design Automation公司最先开发的 4. Verilog HDL中的两类主要数据类型什么? 答:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 5. U D P代表什么? 答:UDP代表用户定义原语 6. 写出两个开关级基本门的名称。 答:pmos nmos 7.写出两个基本逻辑门的名称。 答:and or 8.在数据流描述方式中使用什么语句描述一个设计? 答:设计的数据流行为使用连续赋值语句进行描述 9. 采用结构描述方式描述1位全加器。 答: module full_add(a,b,cin,s,co); input a,b,cin; output s,co; wire S1,T1,T2,T3; xor X1(S1,a,b), X2(s,S1,cin); and A1(T3,a,b), A2(T2,b,cin), A3(T1,a,cin); or O1(co,T1,T2,T3); endmodule 10. i n i t i a l语句与always 语句的关键区别是什么? 答: 1) initial语句:此语句只执行一次。 2) always语句:此语句总是循环执行, 或者说此语句重复执行。 11.采用数据流方式描述2 - 4译码器。 答: 'timescale 1ns/ns module Decoder2×4(A,B,EN,Z); input A,B,EN; output [0:3]Z;

基于VerilogHDL的表决器的设计

基于V e r i l o g H D L的表 决器的设计 This model paper was revised by LINDA on December 15, 2012.

学生课程实验报告书 12 级电通系 通信工程专业 03 班 学号 312890 姓名 2014--2015学年第 2 学期 实验项目:基于Verilog HDL的表决器的设计 实验时间: 实验目的: 1、熟悉Verilog HDL的编程。 2、熟悉七人表决器的工作原理。 3、进一步了解实验系统的硬件结构。 实验原理: 所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。 七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。实验中用7个按键开关来表示七个人,当对应的按键开关输入为‘1’时,表示此人同意;否则若按键开关输入为‘0’,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮。同时,数码管上显示通过的票数。 实验内容: 本实验就是利用实验系统中的按键开关模块和LED模块以及数码管模块来实现一个简单的七人表决器的功能。按键开关模块中的键1~键7表示七个人,当按键开关输入为‘1’时,表示对应的人投同意票,否则当按键开关输入为‘0’时,表示对应的人投反对票;LED模块中D1表示七人表决的结果,当LED1点亮时,表示此行为通过表决;否则当LED1熄灭时,表示此行为未通过表决。同时通过的票数在数码管上显示出来。 实验步骤:原理图步骤与实验一相同 模式选择键”:按动该键能使实验板产生12种不同的实验电路结构。本次实验的模式选择到“5”(红色数码管上显示)。 用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与自己的编程思想一致

Verilog_HDL的交通灯控制器设计

课程设计报告 2015-2016学年第2学期 课程设计名称:电子综合设计EDA课程设计 院(系):电子信息学院 专业:电子信息工程班级:电子1313 姓名: xx 学号: 1310034303xx 综合实验时间: 2016/7/11-2016/7/15 指导教师:钟旭 提交时间: 2016/7/15

上海电机学院课程设计任务书

目录 第一章设计原理 (4) 1.1设计要求 (4) 1.2设计思路和原理 (4) 1.3实现方法 (4) 第二章Verilog HDL程序设计 (6) 2.1整体设计 (6) 2.2 具体设计 (7) 第三章仿真测试 (7) 3.1 波形仿真 (7) 第四章设计总结 (10)

第一章设计原理 1.1设计要求 设计一个交通控制器,用LED显示灯表示交通状态,并以7段数码显示器显示当前状态剩余秒数主干道绿灯亮时,支干道红灯亮;反之亦然,二者交替允许通行,主干道每次放行35s,支干道每次放行25s。每次由绿灯变为红灯的过程中,亮光的黄灯作为过渡,黄灯的时间为5s。能进行特殊状态显示,特殊状态时东西、南北路口均显示红灯状态。用LED灯显示倒计时,并且能实现总体清零功能,计数器由初始状态开始计数,对应状态的显示灯亮。能实现特殊状态的功能显示。[1] 1.2设计思路和原理 (1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。 (2) 选择1HZ时钟脉冲作为系统时钟。 (3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。 (4) 交通灯状态变化如表1及图1所示: 表1 交通灯状态图

VerilogHDL语法基础

Verilog HDL语法基础(1) Verilog的词法约定 1Verilog是大小写相关的,其中的关键字全部为小写。 2空白符由空格、制表符、和换行符组成。 3单行注释以“//”开始,verilog将忽略此处到行尾的内容。多行注释以“/ *”开始,以“*/”结束。多行注释不允许嵌套 4操作符有三种:单目操作符、双目操作符和三目操作符。 5数字声明 Verilog中有两种数字生命:指明位数的数字和不指明位数的数字 指明位数的数字表示形式: Size用来指明数字位宽度,只能用十进制整数表示 Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H) 例如 4’b1111 //4位2进制数 12’h3ac //12位16进制数 不指明位数的数字:如果数字说明中没有指定基数,那么默认表示为十进制数。如果没有指定位宽,则默认的位宽度与仿真器和使用的计算机有关(最小为32位)。 ‘o21//32位八进制数 X值和Z值:不确定值用X表示,高阻用Z值表示。在八进制数中代表3位,十六进制中代表4位。 12’h12X //这是一个12位16进制数,其中低四位不确定 负数:在表示位宽的数字前面增加一个减号来表示它是一个负数。 -6’d3//一个6位的用二进制补码形式存储的十进制数3,表示负数 -6’sd3//一个6位的带符号算数运算的负数 下划线符号和问号: 除了第一个字符,下划线“_”可以出现在数字中的任何位置,它的作用只是提高可读性,在编译阶段会被忽略掉 问号“?”是z的另一种表示,使用问号的目的在于增强casex和casez语句的可读性。在这两条语句中,“?”表示不必关心的情况。 12’B1111_0011_1110// 增强可读性 4’b10??//相当于4’b10zz 6字符串是双引号括起来的一个字符队列。对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。Verilog将字符串当作一个单字节的ASCII字符队列。 “Hello Verilog world”//是一个字符串 7标识符和关键字 关键字是语言中预留的用于定义语言结构的特殊标识符。Verilog中关键字全部小写。 标识符是程序代码中对象的名字,程序员使用标识符来访问对象。Verilog中标识符由字母数字字符、下划线和美元符号组成,区分大小写。其第一个字符必须是数字字符或下划线。

VHDL和VerilogHDL的区别

VHDL与VerlogHDL的不同点序 号 VHDL Verilog 1 文件的扩展名不一样.VHD .v 2 结构不一样包含库、实体、结构体 Entity 实体名is Port(端口说明) End 实体名; Architecture 结构体名of 实体名is 说明部分 Begin 赋值语句; 元件语句; 进程语句等; End 结构体名; 模块结构(module………endmodule) module 模块名(端口列表); 输入/输出端口说明; 变量类型说明; assign 语句(连续赋值语句); 元件例化语句; always@(敏感列表) begin …… end endmodule 其中assign语句、元件例化语句、always 语句的顺序可以更换。 3 对库文件的要求不一 样 须有相应的库或程序包支 持,实体间调用子程序调 用,需要将子程序打成程 序包 没有专门的库文件(只有基本门的库), 模块可以通过例化直接调用,不需要打成 程序包。 4 端口定义的地方不一 样 在实体中定义 在module的模块名后面先列出端口列表, 再在模块中用input,output等定义。 5 端口定义方式不一样端口名[, 端口名] : 方向 数据类型名[Default V alue]; 如Q : inout std_logic_vector(31 downto 0); 端口类型端口1,端口2,端口 3,…; 如:inout [31:0] Q; 6 端口定义类型不一样有in,out,inout,buffer 四种 有input,output,inout三种 7 内部信号声明不一样在结构体中声明,有些局 部变量还可在进程中声明 在端口定义后进行声明内部变量 8 数据默认值默认值为本类型的最小非 负值(某个类型的范围是 以0为对称的) wire类型默认值为z,reg类型默认值为x; 9 标识符规则不一样不区分大小写 区分大小写 10 关键词要求不一样允许大小写混写 如EnTIty 关键词必须是小写 11 常量定义的关键词和 格式不一样 CONSTANT 常量名:数 据类型:=表达式; parameter 常量名1 = 表达式,常量名2 = 表达式,…,常量名n = 表达式;

相关主题
文本预览
相关文档 最新文档