- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
EDA设计基本时序电路
基本时序电路
一、触发器及其应用
实例2-1 对触发器及时钟信号的VHDL描述
一、设计任务:设计一个D触发器。
二、算法设计:用if语句进行描述。
三、源程序dff1.vhd
library ieee;
use ieee.std_logic_1164.all;
entity dff1 is
port(d,clk:in std_logic;
q:out std_logic);
end ;
architecture rtl of dff1 is
signal q_temp:std_logic;
begin
process(clk)
begin
if clkevent and clk=1 then --本句是对触发时钟进行描述时,用得最多的一种语句。
q_temp=d;
end if;
q=q_temp;
end process;
end rtl;
--if语句中,用信号属性even来判断时钟触发事件是否发生,用clk=1规定触发时钟的上沿为有效触发沿。语句“if clkevent and clk=1 then”的含义是:若有触发时钟信号产生且当触发时钟的上沿出现时,容许触发器读入输入数据。如果上述事件没有发生,则不容许触发器读入输入数据,而读入输入数据的规则由后续语句规定。
--若规定触发器是下沿触发,则触发时钟描述语句为“if clkevent and clk=0 then”。
--图3—2是D触发器的仿真波形图。由图可以看出,触发器的默认起始状态值为0,在第一个触发脉冲的上沿出现时刻,电路系统把数据1写入触发器。在第二个触发脉冲的上沿出现时刻,电路系统仍把数据1写入触发器,但由于触发器原状态为1,写入数据仍为1,所以触发器保持1状态不变。在第三个触发脉冲的上沿出现时刻,输入数据变为0,电路系统把数据0写入触发器。以后尽管有触发脉冲的上沿出现,但是输入值为0不变,所以触发器保持0状态。
图3-2 D触发器的仿真波形图
实例2-2 锁存器
一、设计任务:设计一个锁存器。
二、算法设计:用条件涵盖不完整的if语句实现锁存器。
三、源程序latch.vhd
library ieee;
use ieee.std_logic_1164.all;
entity latch is
port(kz,din:in std_logic;
q:out std_logic);
end ;
architecture a of latch is
signal q_temp:std_logic;
begin
p1:process(kz,din)
begin
if kz=1 then
q_temp=din;
end if;
q=q_temp;
end process;
end ;
四、源程序说明
1.用条件涵盖不完整的if语句可以实现锁存器。这个结果提示我们在用if条件语句进行设计时,要明确设计的任务是什么,若设计的不是锁存器,则必须使条件涵盖完整,以避免错误引入锁存器。
2.若本例描述的锁存器中的控制信号kz是一个异步信号,而且输入信号较高,就有可能在输出形成冒险干扰,应注意克服。
3.图3-11是锁存器正常工作时的仿真波形图。
二、计数器及其应用
实例2-3 二进制(M=16)计数器
一、设计任务:设计一个二进制(M=16)计数器。一般把计数器的模值M=2n、状态编码为自然二进制数的计数器简称为二进制计数器。
二、算法设计:用if语句描述二进制(M=16)计数器。
三、源程序count16.vhd
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count16 is
port(clk:in bit;
oc:out bit;
y:out integer range 0 to 15);
end ;
architecture a of count16 is
signal q:integer range 0 to 15;
begin
process(clk)
begin
if (clkevent and clk=1) then
q=q+1;
end if;
if q=15 then
oc=0;
else
oc=1;
end if;
y=q;
end process;
end;
--程序中oc是计数器进位输出端。用整数数据类型设计二进制计数器是很方便的。若要M=256,只要把整数数据范围改为:integer range 0 to 255。
实例2-4 BCD码60进同步计数器
一、设计任务:设计一个BCD码60
文档评论(0)