在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5361|回复: 13

[求助] 关于多位的数据选择器

[复制链接]
发表于 2011-5-27 17:33:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 larlyii 于 2011-5-27 18:32 编辑

小弟我最近分别用连续赋值和过程块写了2个很简单的数据选择器,选择端是2bit的,综合出来的RTL Viewer不一样,但我看时序分析完全一样。这2种写法综合出来的电路是不是一样的呀?只是RTL Viewer看到的不一样?




  1. module temp_2(
  2. input [1:0]sel,
  3. input a, b, c,
  4. output out
  5. );
  6. assign out = (sel == 2'b00) ? a :
  7.      (sel == 2'b01) ? b :
  8.      (sel == 2'b10) ? c : 0;
  9. endmodule



复制代码

RTL Viewer图如下
temp_2.jpg

另一种是用过程块写的:




  1. module temp(
  2. input [1:0]sel,
  3. input a, b, c,
  4. output reg out
  5. );
  6. always @(*) begin
  7.   case (sel)
  8.    2'b00 : out <= a;
  9.    2'b01 : out <= b;
  10.    2'b10 : out <= c;
  11.    default : out <= 0;
  12.   endcase
  13. end
  14. endmodule



复制代码

RTL Viewer图如下:
temp.jpg
发表于 2011-5-27 23:19:05 | 显示全部楼层
把第二个方法中的非阻塞赋值改为阻塞赋值应该就一样了
这个电路时组合电路,没必要用非阻塞
发表于 2011-5-27 23:52:26 | 显示全部楼层
这个问题很经典。
正是经常用的一个考题,verilog里面用if else写出来的代码和case写出来的同样逻辑功能的代码,综合出来有什么不一样。
发表于 2011-5-28 08:35:12 | 显示全部楼层
第一种写法相当于if else的方式,具有优先级,所以和case写出来的不同,RTL图正好对应。
发表于 2011-5-28 21:53:55 | 显示全部楼层
仔细看一下RTL视图,第一个RTL视图里面是有优先级的,第二个RTL视图里面没有是并行的,没有优化级的概念。
正好和if-else,case语句对应
 楼主| 发表于 2011-5-30 20:17:37 | 显示全部楼层
回复 2# 870027359


    谢谢你的回复!
我把非阻塞改成阻塞之后综合出来的效果还是一样的呀。并没有什么改变。

另外,如果我对组合电路用非阻塞的话会出现什么问题吗?我觉得对于组合电路阻塞和非阻塞应该是一样的。不知我的想法对不?
 楼主| 发表于 2011-5-30 20:23:56 | 显示全部楼层
回复 5# justshuashua


    谢谢你的回复!
if-else-确实是由很多级二选一的数据选择器起来的,但我查过case的语法,夏宇闻的那本书上说执行完case分项后的语句之后,跳出该case语句结构,终止case语句的执行。相当于也是变形的if-else语句,也就是说,我把case语句块里面的任意2行交换的话,优先级就不同了。

另外,我对比过2种写法的综合效果,综合出来的pin-to-pin的延迟完全一样,毫无差别。所以我猜想是不是2种写法生成的硬件结构是一样的呢?
 楼主| 发表于 2011-5-30 20:26:42 | 显示全部楼层
本帖最后由 larlyii 于 2011-5-30 20:31 编辑

回复 3# acgoal


    谢谢你的回复哈!
那这个问题的答案是啥?不一样?不过虽然表面上电路结构不一样,但我综合出来的pin-to-pin延迟却完全一摸一样,具体情况还请看我9楼的回复。不知我说的对不对?
 楼主| 发表于 2011-5-30 20:32:28 | 显示全部楼层
回复 7# njithjw


    谢谢你的回复!
这位高手也请你看我9楼的回复,不知我说的对不对?
发表于 2011-5-31 09:01:58 | 显示全部楼层
1. if-else条件写全后和full-case应该是等价的,现在的综合器都会自动选择,是使用有优先级的(延迟大资源少)还是使用无优先级的(延迟小资源大)。
2.在RTL VIEW里面,是看不到最终FPGA的映射结果,只是纯粹的HDL到RTL图的映射。实际如果用ASIC实现,既有可能综合成前一个,也有可能综合成后一个。
3.在FPGA内,无论前一个还是后一个,都是用LUT表实现的,所以pin2pin的延迟一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-9 04:30 , Processed in 0.027214 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表