知识点(数的操作)
1、有符号数的比较
module signed_compare#(
parameter DATAWIDTH = 'd8
)
(
input [DATAWIDTH-1:0] data_a,
input [DATAWIDTH-1:0] data_b,
output[DATAWIDTH-1:0] data_out
);
function [DATAWIDTH-1:0]max_data;
input [DATAWIDTH-1:0]campare_a;
input [DATAWIDTH-1:0]campare_b;
reg campare_flag;//max_a flag = 1,max_b flag = 0;
begin
if(campare_a[DATAWIDTH-1]!=campare_b[DATAWIDTH-1])
begin
campare_flag = (campare_a[DATAWIDTH-1]>campare_b[DATAWIDTH-1])?1'b0:1'b1;
end
else begin
campare_flag = campare_a?(-campare_a[DATAWIDTH-1:0]<-campare_b[DATAWIDTH-1:0]):(campare_a[DATAWITH-1:0]>campare[DATAWIDTH-1:0]);
end
assign max_data = campare_flag?campare_a:campare_b;
endfunction
assign data_out = max_data(data_a,data_b);
2、有符号数求绝对值
module abs_data#(
parameter DATAWIDTH = 'd8
)
(
input [DATAWIDTH-1:0]data,
output [DATAWIDTH-1:0]data_abs
);
function [DATAWIDTH-1:0] abs;
input [DATAWIDTH-1:0] data_temp;
assign abs = (data_temp[DATAWIDTH-1])?(-data_temp):(data_temp);
endfunction
assign data_abs=abs(data);
3、有符号加法
module signed_add#(
parameter DATAWIDTH = 'd8
)
(
input [DATAWIDTH-1:0]data_a,
input [DATAWIDTH-1:0]data_b,
output [DATAWIDTH-1:0] sum
);
assign sum = {data_a[DATAWIDTH-1],data_a}+{data_b[DATAWIDTH-1],data_b};