EDA(QuartusII)——十进制加法计数器设计

EDA(QuartusII)——⼗进制加法计数器设计
⽬录
实验⽬的:
猴子的B和人的B一样吗1. 熟悉QuartusⅡ软件的使⽤⽅法,掌握EDA流程;
2. 掌握基本时序逻辑电路的设计⽅法;
3. 学会⼗进制加法计数器设计,为复杂时序逻辑电路的设计打基础。
实验预习:
1. 掌握⼗进制加法计数器的设计原理;
自动拖把2. 同步、异步电路的实现;
3. if语句的⽤法。
实验讲解1:
tmdi-30
D触发器和锁存器的VerilogHDL描述:
module D_ff(D,clk,q);    //D触发器
input D,clk;
output reg q;
always@(posedge clk)
q<=D;
end
endmodule
module latchl(D,clk,q);    //锁存器
input D,clk;
output reg q;
always@(D or clk)
if(clk)
q<=D;
end
endmodule
锁存器与触发器的共同点:具有0 和1两个稳定状态,⼀旦状态确定,就能⾃⾏保持。⼀个锁存器/触发器能存储⼀位⼆进制码。
锁存器与触发器的不同点:锁存器---对脉冲电平敏感的存储电路,在特定输⼊脉冲电平作⽤下改变状态。触发器---对脉冲边沿敏感的存储电路,在时钟脉冲的上升沿或下降沿的变化瞬间改变状态。
语法点1:
时序标志性描述posedge  clk:凡是边沿触发性质的时序元件必须使⽤posedge (negedge)  clk,⽽不⽤此表述产⽣的时序电路都是电平敏感性时序电路。其中posedge clk 表⽰上升沿触发,⽽negedge clk 表⽰下降沿触发。
实验讲解2:
D触发器的设计
module d_ff(rst,D,clk,q);//异步
input rst,D,clk;
output reg q;
always@ (posedge clk or posedge rst)
begin
gvg668if(rst)
q<=0;
else
q<=D;
end
endmodule
异步复位D触发器的仿真波形
module d_fft(rst,D,clk,q);//同步
input rst,D,clk;
output reg q;
always@ (posedge clk  )
begin
if(rst)
q<=0;
else
q<=D;
end
endmodule
同步复位D触发器的仿真波形
语法点2:异步与同步
异步:指独⽴于时钟控制的复位控制端。即在任何时刻,只要rst=1或0,触发器的输出端⽴刻被清0,与时钟的状态⽆关。
使⽤的语句:
同步:不仅rst有效,且必须时钟上升沿到来,触发器的输出端才清0;
使⽤的语句
Verilog的时钟过程描述注意要点:当敏感信号表中没有关键词posedge或negedge时,试图通过改变敏感信号的放置来改变逻辑功能是⽆效的。当敏感信号表中含有关键词posedge或negedge时,通过改变敏感信号的放置可以影响综合结果。
语法点3:条件语句( if语句)
条件语句就是根据判断条件是否成⽴,确定下⼀步的运算。if后⾯的条件表达式⼀般为逻辑表达式或关系表达式,且必须放在括号内。
执⾏if语句时,⾸先计算表达式的值,若结果为0、x或z,按“假”处理;若结果为1,按“真”处理,并执⾏相应的语句。
Verilog语⾔中有3种形式的if语句:
格式1为不完整的条件语句,⽤于产⽣时序电路,如下所⽰:
if (condition_expr)    true_statement;
格式2为完整的条件语句,产⽣组合逻辑电路;特定情况产⽣时序电路,⽐如posedge CLK等表述的边沿敏感信号,如下所⽰:if (condition_expr)    true_statement;
else  fault_ statement;
格式3为多重嵌套式条件语句,可以产⽣⽐较丰富的条件描述,既可产⽣时序电路,也可产⽣组合电路。
if (condition_expr1)        true_statement1;
else if (condition_expr2)    true_statement2;
else if (condition_expr3)    true_statement3;
……
else default_statement;
实验内容:⼗进制加法计数器设计
实验设计要求:设计带异步复位,同步使能的⼗进制加法计数器。其中,RST为异步复位信号,EN为同步使能信号,CLK为时钟信号。CQ为计数输出,COUT为进位输出。
⼗进制加法计数器设源程序:
module cnt_10(rst,en,clk,q,cout);//⼗进制加法器
input rst,en,clk;
output reg[3:0] q;
output reg cout;
always@(posedge clk or negedge rst)
begin
if(~rst) begin q<=4'b0000; cout<=1'b0;end//是0就执⾏此⾏
else if(en)
if(q==4'b1001) begin q<=4'b0000;cout<=1'b1; end
else begin q<=q+1'b1; cout<=1'b0;end
end
endmodule
语法点4:过程赋值语句(相当于VHDL中的变量赋值)
过程赋值语句出现在initial和always块语句中,赋值符号是“=”,格式为:
赋值变量 = 表达式;
在过程赋值语句中,赋值号“=”左边的赋值变量必须是reg(寄存器)型变量,其值在该语句结束即可得到。如果⼀个块语句中包含若⼲条过程赋值语句,那么这些过程赋值语句是按照语句编写的顺序由上⾄下⼀条⼀条地执⾏,前⾯的语句没有完成,后⾯的语句就不能执⾏,就象被阻塞了⼀样。因此,过程赋值语句也称为阻塞赋值语句。
在Verilog程序的过程结构中,阻塞式赋值是⼀种理想化的数据传输,是⽴即发⽣的,不存在任何延时⾏为。
在同⼀过程结构中,允许对同⼀⽬标变量多次赋值,即对于同⼀⽬标变量允许有多个驱动源。
具有顺序赋值的特点,即过程中的阻塞式赋值语句的先后顺序位置将直接影响最后的结果或综合结果。
无线发射电路
语法点5:⾮阻塞赋值语句(相当于VHDL中的信号赋值)
⾮阻塞赋值语句也是出现在initial和always块语句中,赋值符号是“<=”,格式为:
赋值变量 <= 表达式;
在⾮阻塞赋值语句中,赋值号“<=”左边的赋值变量也必须是reg型变量,其值不象在过程赋值语句那样,语句结束时即刻得到,⽽在该块语句结束才可得到。
建议:在时序逻辑电路的设计中,采⽤⾮阻塞型赋值语句。
在Verilog程序的过程中,⾮阻塞赋值语句⽐较接近真实的电路赋值和输出,其有⼀个特殊的延时操作,⽽且在赋值过程中不影响其它同类语句的赋值操作。同阻塞式赋值⼀样,允许对同⼀⽬标信号多次赋值或驱动。Verilog规定,被赋值的⽬标变量接受最接近过程结束的那⼀个驱动源的数据。
例如,在下⾯的块语句中包含4条赋值语句
always      @(posedge clock)
m = 3;
n = 75;
n <= m;电子离合器
r = n;
语句执⾏结束后,r的值是75,⽽不是3,因为第3⾏是⾮阻塞赋值语句“n <= m”,该语句要等到本块语句结束时,n的值才能改变。
实验任务1:
学⽣实现⼗进制加法计数器的代码输⼊、综合、软件仿真;对软件仿真结果进⾏认真的分析,并通过软件仿真的结果来修改设计;
实验任务2:
学⽣根据⼗进制加法计数器的输⼊输出端⼝选择电路模式,并进⾏相应的引脚锁定、编程下载和硬件验证。
【时钟由系统的clkB0或者B1输⼊,使能信号、复位信号则由按键输⼊,输出cout则由led灯显⽰,其余由数码管显⽰数值】

本文发布于:2024-09-21 03:26:47,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/303217.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:语句   赋值   过程   信号   设计   进制   加法
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议