网站大量收购独家精品文档,联系QQ:2885784924

[工学]第七章 VHDL语言.ppt

  1. 1、本文档共351页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]第七章 VHDL语言

顺序语句和并发语句 并发语句 (4) generate语句 ——并发描述语句 与顺序描述语句Loop一样用于循环执行某项操作,产生多个相同的结构,通常与For一起使用. 注意:GENERATE中循环操作的上界和下界都必须是静态的 label: FOR 变量 IN range GENERATE 并发处理语句; END GENERATE; 语法结构 并发语句 (4) generate语句 For—generate与For— Loop语句不同: For—generate语句中所列的是并发处理语句,与书写顺序无关。 语句结构中不能有EXIT和NEXT。 循环变量是局部变量、临时变量,由语句自动 生产,不需要定义。 label: FOR 变量 IN range GENERATE 并发处理语句; END GENERATE; 并发语句 Gegerate语句产生4个D触发器元件 并发语句 (4) generate语句 在generate语句使用过程中,容易出现多值驱动问题,下面的代码是可以正常综合的 当出现下面两种情况之一时,编译器会提示多驱动错误,同时停止编译 OK: FOR i IN 0 TO 7 GENERATE ?????? Output(i) = ‘1’ WHEN (a(i) and b(i)) = ‘1’ ELSE ‘0’; END GENERATE; NotOK: FOR i IN 0 TO 7 GENERATE ?????? accum = ???WHEN??? (a(i) and b(i)) = ‘1’ ELSE ; END GENERATE; NotOK: FOR i IN 0 TO 7 GENERATE ?????? accum = accum + 1 WHEN x(i) = ‘1’; END GENERATE; 采用并行进位设计实现下图所示的4位并行加法器 并行语句 例:并行加法器设计 并行语句 例:并行加法器设计 定义输入信号a和b, 数据类型为:Std_Logic_Vector(4位),输入信号Cin,数据类型为Std_Logic 定义输出信号S,数据类型为: Std_Logic_Vector(4位),输出信Cout,数据类型为 Std_Logic 要求进位Ci的本地进位di和传递条件ti及加法器输出Si用并发语句GENERATE描述, 进位 Ci用数据流描述方式实现 entity add is port( cin : in std_logic; cout : out std_logic; a : in std_logic_vector(3 downto 0); b : in std_logic_vector(3 downto 0); s : out std_logic_vector(3 downto 0) ); end add; architecture rtl of add is signal d : std_logic_vector(3 downto 0); signal t : std_logic_vector(3 downto 0); signal c : std_logic_vector(4 downto 0); begin ok: for i in 0 to 3 generate d(i) = a(i) and b(i); t(i) = a(i) or b(i) end generate; c(0) = cin; c(1) = d(0) or (t(0) and c(0)); c(2) = d(1) or (t(1) and d(0)) or (t(1) and t(0) and c(0)); c(3) = d(2) or (t(2) and d(1)) or (t(2) and t(1) and d(0)) or (t(2) and t(1) and t(0) and c(0)); c(4) = d(3) or (t(3) and d(2)) or (t(3) and t(2) and d(1)) or (t(3) and t(2) and t(1) and t(0) and c(0)); cout = c(4); s = d; end rtl; 并行语句 (二

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档