发 帖  
[FPGA作品] 勇敢的芯伴你玩转Altera FPGA连载36:Verilog代码风格之寄存器电路的龙8国际娱乐网站方式
2018-1-2 19:38:56  925
收藏 1 收藏 推荐 0 推荐
分享
勇敢的芯伴你玩转Altera FPGA连载36Verilog代码风格之寄存器电路的龙8国际娱乐网站方式
特权同学,版权所有
配套例程和更多资料下载链接:
http://pan.baidu.com/s/1i5LMUUD
         上一章节中也已经基本介绍了寄存器的基本原型,在现代逻辑龙8国际娱乐网站中,时序逻辑龙8国际娱乐网站是核心,而寄存器又是时序逻辑的基础。因此,掌握时序逻辑的几种常见代码书写方式又是基础中的基础。下面我们就以图文(代码)并茂的方式来学习这些基本寄存器模型的代码书写。
① 简单的寄存器输入输出的模型如图5.2所示。每个时钟信号clk的有效沿(通常是上升沿),输入端数据din将被锁存到输出端dout。
图5.2 基本寄存器
         基本的代码书写方式如下:
// Verilog例程
module dff(clk, din,dout);
input clk;
input din;
output dout;
reg dout;
always @ (posedgeclk) begin
         dout <= din;
end
endmodule
② 带异步复位的寄存器输入输出的模型如图5.3所示。每个时钟信号clk的有效沿(通常是上升沿),输入端数据din将被锁存到输出端dout;而异步复位信号clr的下降沿(低电平有效复位)将强制给输出数据dout赋值为0(不论此时的输入数据din取值),此输出状态将一直保持到clr拉高后的下一个clk有效触发沿。
图5.3 异步复位的寄存器
基本的代码书写方式如下:
// Verilog例程
module dff(clk, rst_n,din, dout);
input clk;
input rst_n;
input din;
output dout;
reg dout;
always @ (posedge clkor negedge rst_n) begin
         if(!rst_n) dout <= 1'b0;
else dout <= din;
end
endmodule
③ 带异步置位的寄存器输入输出的模型如图5.4所示。每个时钟信号clk的有效沿(通常是上升沿),输入端数据din将被锁存到输出端dout;而异步置位信号set的上升沿(高电平有效置位)将强制给输出数据dout赋值为1(不论此时的输入数据din取值),此输出状态将一直保持到set拉低后的下一个clk有效触发沿。
图5.4 异步置位的寄存器
基本的代码书写方式如下:
// Verilog例程
module dff(clk, set,din, dout);
input clk;
input din;
input set;
output dout;
reg dout;
always @ (posedge clkor posedge set) begin
         if(set) dout <= 1'b1;
         else dout <= din;
end
endmodule
④ 既带异步复位,又带异步置位的寄存器则如图5.5所示。既带异步复位,又带异步置位的寄存器其实是个很矛盾的模型,我们可以简单的分析一下,如果set和clr都处于无效状态(set=0,clr=1),那么寄存器正常工作;如果set有效(set=1)且clr无效(clr=1),那么dout=1没有异议;同理,如果set无效(set=0)且clr有效(clr=0),那么dout=0也没有异议;但是如果set和clr同时有效(set=1,clr=0),输出dout咋办?到底是1还是0?
图5.5 异步复位和置位的寄存器
其实这个问题也不难,设置一个优先级不就好了。当然了,图5.5的理想寄存器模型通常只是作为电路的一部分来实现。如果我们期望这种既带异步复位,又带异步置位的寄存器在复位和置位同时出现时,异步复位的优先级高一些,那么代码书写方式可以如下:
// Verilog例程
module dff(clk,rst_n, set, din, dout);
input clk;
input din;
input rst_n;
input set;
output dout;
reg dout;
always @ (posedge clkor negedge rst_n posedge set) begin
         if(!rst_n) dout <= 1’b0;
else if(set)dout <= 1'b1;
         else dout <= din;
end
endmodule
         这样的代码,综合出来的寄存器视图则如图5.6所示。
图5.6 异步复位和置位的寄存器(复位优先级高)
⑤ 如图5.7所示,这是一种很常见的带同步使能功能的寄存器。每个时钟clk的有效沿(通常是上升沿),判断使能信号ena是否有效(我们取高电平为有效),在ena信号有效的情况下din的值才会输出到dout信号上。
图5.7 带同步使能的寄存器
基本的代码书写方式如下:
// Verilog例程
module dff(clk, ena,din, dout);
input clk;
input din;
input ena;
output dout;
reg dout;
always @ (posedge clk)begin
         if(ena) dout <= din;
end
endmodule

2018-1-2 19:38:56   评论 举报
只有小组成员才能发言,加入小组>>
258个成员聚集在这个小组 加入小组

创建小组步骤

关闭

站长推荐 上一条 /9 下一条

快速回复 返回顶部 返回列表
-

推荐专区

long88.vip龙8国际干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

工程师杂谈

项目|工程师创意

招聘|求职}工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

ARMlong88.vip龙8国际论坛

Linux论坛

单片机/MCU论坛

MSP430long88.vip龙8国际论坛

FPGA|CPLD|ASIC论坛

STM32/STM8long88.vip龙8国际论坛

NXP MCU long88.vip龙8国际论坛

DSP论坛

嵌入式系统论坛

-

电源long88.vip龙8国际论坛

电源long88.vip龙8国际论坛

无线充电long88.vip龙8国际

-

硬件龙8国际娱乐网站论坛

电路龙8国际娱乐网站论坛

电子元器件论坛

传感long88.vip龙8国际

总线long88.vip龙8国际|接口long88.vip龙8国际

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量long88.vip龙8国际专区

-

EDA龙8国际娱乐网站论坛

multisim论坛

PCB龙8国际娱乐网站论坛

PADSlong88.vip龙8国际论坛

Protel|AD|DXP论坛

Allegro论坛

proteus论坛|仿真论坛

Orcad论坛

-

综合long88.vip龙8国际与应用

电机控制

工程资源中心

汽车电子long88.vip龙8国际论坛

医疗电子论坛

-

开源硬件

-

无线通信论坛

物联网long88.vip龙8国际

天线|RF射频|微波|雷达long88.vip龙8国际

-

IC龙8国际娱乐网站论坛

芯片测试与失效分析

Analog/RF IC龙8国际娱乐网站

龙8国际娱乐网站与制造封装测试

-

厂商专区

TI论坛

TI Deyisupport社区

-

检测long88.vip龙8国际与质量

电磁兼容(EMC)龙8国际娱乐网站与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机long88.vip龙8国际论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

方案交易

供需广告

芯片求购|供应发布区