首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

组合逻辑电路技巧-3

组合逻辑电路技巧-3

5、逻辑运算实例
Input
Output
1bit的加法器——半加器 a0,a1
s,c1
                     
  全加器 c0,a0,a1
s,c1
全加器:
assign s = (a0^a1)^c0;
assign t1 = a0&c0;
assign t2 = a1&c0;
assign t3 = a0&a1;
assign c1 = (t1|t2)|t3;
②利用缩减运算进行操作——变量ab
|a 缩减或 判断一个数全为0(若结果为0
&a 缩减与 判断一个数全为1(若结果为1
^a 缩减异或 判断一个数有奇数个1(若结果为1
~^a 缩减同或 判断一个数有偶数个1(若结果为1
|(a^b) 按位异或+缩减或判断两个数相等(若结果为0
6、算术运算加减乘除
+ - * 可综合
a/b 不可综合 整数除法,结果取靠近0的整数,(b0时,结果为x
a%b 不可综合 结果与a的符号相同
a**bab)不可综合 ①操作数为实数、整数或带符号数,结果返回为实数
②操作数为无符号数,结果为无符号数
a0,且b<0,则输出为x
a<0,且b不是整数,则输出为x
注:直接使用/”时,会占用很多资源,且时钟频率上不去。因为不是完全不能使用“/”,而是适不适合使用。如果不用于复杂的Verilog算法,且对计算时间要求不严,是可以使用的。
7、移位操作①>>    逻辑右移 空位用0填充
    <<   逻辑左移 空位用0填充
    >>> 算术右移 无符号数,空位用0填充。有符号数,用其符号位填充
    <<< 算术左移 空位用0填充
注:对于移位操作,移位的位数必须是常数值
有符号数 8’sb1000_1101>>>8’d2 = 8’sb1110_0011
②用移位代替*,可以节省资源
m = 17a = (16 + 1)*a = (a<<4) + a;
m = 6a = (8 - 2)*a = (a<<3) - (a<<1);
注:一些FPGADSP核,可将乘法器优化到这些硬核中去。
8、有符号数wire signed [7:0] a;
指定比特宽度的有符号数是可综合的。
9、加法电路分析注:减法一般可转化为加负的被加数处理。
4bit,无符号数加法器
逐次进位型:建立时间为各级半/全加器的建立时间之和。
当位宽很大时,这种单元可以允许的最高工作时钟频率是很低的。


设:全加器的处理速度是1ns,全加器之间的传输线上的时延是1ns
则time = 4 + 3 = 7ns
∴ 4bit加法器需要7ns142.857MHz
进而,10bit 10 + 9 = 19ns52.631MHz
so,要提高工作的最高时钟频率,采用时序电路里的流水线方法。
10、关系操作> < >= <= == !=
注:对于无符号数和有符号数的比较,从代码上看是没有区别的。
但是,除了相等和不等操作外,这两类数值的比较在电路上有区别。11、高比特宽度比较 大于>方法:先扩展位数宽度一致,然后一位位比较,如果相同再向下比。
a != b a^b
a > b a&&(!b
12、不同编码方式下,比大于操作原码 反码 补码非负数 ①去掉符号位后,按无符号数处理
负数 ①之后,结果取反
注:4位有符号二进制数的表示数值范围
原码 -77+0-0


反码 -77
+0-0
补码 -87
而补码的出现,使以前的-0变为了-1281000
注意,补码-128并没有用原码和反码表示。
13、拼接操作 {signal1signal2......}signal可以是常数或变量,但位宽必须已知且不变。
①拼接操作实现全家器(1bit
assign {c1,s1} = a0 + a1 + c0;
②乘法器 ×17 = ×16 +×1 8bit
assign mul = {4’b0000,a,4’b0000} + {8’h0,a};
优化:wire [8:0] sum_middle
assign sum_middle = {1’b0,a} + {5’b00000, a[7:4]};
assign sun = {3’b000, sum_middle, a[3:0]};
③一个数据全部颠倒
wire [7:0] forward;
wire [0:7] reversed;
assign reversed = forward;
返回列表