TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 M$ J4 I' i3 R2 w) g) S" m
9 z$ F5 n1 G/ H5 O' a5 } 加减乘,在fpga设计中,使用verilog hdl语言来描述,简单的很,直接就是+、-、*,没有任何疑问,但是计算过程中的信号的位宽,却值得认真揣摩。" s% J0 b, G' O& I* q
( V' q$ z$ i" X
数学运算,必然涉及到有符号数与无符号数的区别,因此在写hdl代码时,必须明确参与运算的信号是否是有符号数。建议:参与运算的符号要么都是有符号数,要么都是无符号数,不建议使用有符号数与无符号数进行数学运算,如果在参与运算的两个信号一个是有符号数,而另外一个是无符号数的话,建议把无符号数扩展一位,将其转换成有符号数来进行处理。
3 k3 f& `7 u5 U1 ~0 l+ Q 无符号数扩展成有符号数的方法(以verilog为例):7 X5 A; v6 l1 v
input [7:0] data;7 p" v/ h6 t: z( X8 A M4 K2 Y& C6 ^
wire [8:0] data_r; E- W0 m* P, ~& A: W, y5 ]2 P
assign data_r = {data[7],data};/ r. j. E7 s; _$ e9 @
: K& G& L0 g1 H2 q% C% I; S
加法运算中的位宽处理:
1 h5 B E3 ]1 `6 d- j! _ S input [7:0] data_a;
! M0 K& O* G' `* |7 M8 g input [7:0] data_b;
; X& r5 c& M% e7 o output [8:0] data_x;4 c7 H6 s c( |& b4 o
wire [8:0] data_x;8 D& C+ s& y& v; R2 C4 k
assign data_x = data_a + data_b;
1 F( U, m% p U3 k 如上面的代码,在做加法运算的时候,建议:
' S/ l+ L+ e7 C2 j6 x 1、加法运算符两边的信号,位宽一致;( M! M) O, ]2 l/ D+ w$ b" E
2、加法运算符两边的信号,要么都是有符号数,要么都是无符号数;
+ l& c- b" U5 s9 d1 O& m 2、考虑到加法可能产生进位,输出信号比输入信号多1bit即可。: h/ ?& R8 `: n# V: Z
% J/ g d" I, ~, |
乘法运算中的位宽处理:
; R8 [" I. s" a' i8 g 1. 两个无符号数相乘4 d* ^$ ^( k3 Z
input [7:0] data_a;" [. B2 h6 `" Q+ `( l5 O" o
input [4:0] data_b;
9 x5 F( h3 q' l4 P& F" K output [12:0] data_x;6 \- Y- c& A" k8 b( O
wire [12:0] data_x;+ y3 I! T' c5 Y# J6 ]; Z
assign data_x = data_a * data_b;$ P% e6 r7 h- v4 A
两个无符号数相乘,输出信号位宽直接定义成两个输入信号位宽之和即可。 e; i s) R( X% @
& X9 _" O5 N' @2 @! ^$ p0 u 2. 两个有符号数相乘7 I6 r3 N1 J( Q6 z3 r
reg signed [7:0] data_a;& B8 V1 V# X& b6 H
reg signed [4:0] data_b;
% A# u4 H2 K9 _4 H3 I5 u output [12:0] data_x;
' T' T V# @3 D- M7 I; G. v( f wire signed [11:0] data_x;& j& z" s0 J7 g3 n+ y: f4 _* o
assign data_x = data_a * data_b;6 L( z( Q, Z: Z7 w" u: |0 _
两个有符号数相乘,考虑到符号位可以合并成一位,输出信号位宽定义成两个输入信号位宽之和-1即可。
$ X" g0 Z, P7 {+ @1 g' }5 s$ N
j. P; d' @* ~+ e 3. 平方运算
- _. a- ?' T9 K& ^$ \ 如果输入信号是无符号数,则输出信号位宽等于输入信号位宽2倍;+ M2 r/ E* P+ k2 m+ f& X$ {- f( r
如果输入信号是有符号数,则输出信号位宽等于输入信号位宽2倍-29 v0 N m" {2 K: c; n
& `' x7 F4 K* ]5 |" r' A4 P
& W. u) \: d. n4 o4 ~" h9 S6 q l5 l% K! I9 m3 ^. g" i- O: H
|
|