|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
+ K0 k3 ^! O& ^5 K% \ U
% _1 l8 l0 ?8 O! \' s5 |' Y' ?$ @ 在设计中,所有的算数运算符都是按照无符号数进行的。如果要完成有符号数计算,对于加、减操作通过补码处理即可用无符号加法完成。对于乘法操作,无符号数直接采用“*”运算符,有符号数运算可通过定义输出为 signed 来处理。
* Q3 c ~6 P7 V2 a3 I
1 A% ]2 x# Q/ w1 x! @+ I通过“*”运算符完成有符号数的乘法运算。7 M0 `# f5 J- e1 U1 e
module ceshi (out, clk, a, b); . P% {5 N" v5 G
output [15:0] out;
6 v# t; F$ N& |$ ^6 S( d7 ?. Ainput clk;
. l" v5 q1 ]+ j$ J4 ?) L/ Z9 [8 G, y0 h* J1 G& a4 _8 z! N$ U7 J
//通过 signed 关键字定义输入端口的数据类型为有符号数 # U3 U+ e; N. O8 ~
input signed [7:0] a;
# R" G1 i9 F. W' z) Uinput signed [7:0] b;
& T0 l S, w+ g* s8 B5 }3 n# {' P6 g) S
//通过 signed 关键字定义寄存器的数据类型为有符号数
7 G$ g) Q5 S4 @/ \, f1 jreg signed [7:0] a_reg; 5 E* U" _9 ~- l. U0 I
reg signed [7:0] b_reg; $ n. L5 u7 ~6 G
reg signed [15:0] out; $ J1 C2 Y1 B9 _/ I/ \1 Y% N J' D- F( I
5 V. U; L* _6 c
wire signed [15:0] mult_out;/ O ]4 q% Y0 b# Z8 B, P+ a
//调用*运算符完成有符号数乘法
: C3 \0 X% k" D3 G* Lassign mult_out = a_reg * b_reg; 1 B! m4 E+ p: B7 [. Q X2 d0 R$ k
" E* x9 Y: p7 b, f3 {8 C: ialways@(posedge clk) $ K6 S9 @4 r) z; L# ^! U3 T" n/ n
begin
; z1 A) I# |, l5 |& N0 ua_reg <= a;
: j' z/ z9 X: ? G- A/ lb_reg <= b;
( a! A% T' h6 l. X Gout <= mult_out;
; A7 s3 }3 U e0 j0 Z mend
: J) r8 R4 J" U% o# o; {8 b0 H& B3 F* ?1 s1 G
endmodule; U7 A: V+ L& y/ q; P8 c+ p" L
上述程序在 ISE 中的综合结果如下图所示,从其 RTL 结构图可以看到乘法器标注为“signed” ,为有符号数乘法器。
9 ? ]3 |4 }* s" ^$ h$ N* Y
- o1 w( D- ?+ G9 h0 J. K' W0 l" O( n; J* p5 x9 }8 _7 ]8 @# e
仿真结果图 8 v: ^3 g# s& ~2 E
4 Z) [; [9 N5 h7 L, g
5 V, k5 z2 q( w. _7 t' A
二进制显示的结果
1 y3 S, g0 }1 f" M" [ 1 m- Q! h, n6 N c* ]2 ~
|
|