在fpga做数字信号处理时,经常会遇到这个转换的问题,比如我的ADC采集的数据和DAC输出的数据采用的都是无符号数,但在使用一些ip核比如dds、fir、fft等的时候,需要使用的是有符号数,因此就需要这样的转换,并且保证波形和原来一致。
1.无符号转有符号(举例)
wire signed [13:0] ori_wave;
assign ori_wave = (sin_1k>8192)?{sin_1k-8192}:{sin_1k+8192};
wire signed [13:0] carry_wave;
assign carry_wave = (sin_10m>8192)?{sin_10m-8192}:{sin_10m+8192};
adc采集
assign adc_clk = clk;
wire signed [11:0] adc_data_signed; // ADC采样数据有符号化
reg [11:0] adc_data_trans;
always@(posedge clk) begin
adc_data_trans <= 12'd4095-adc_data;
end
assign adc_data_signed = (adc_data_trans>2047)?{adc_data_trans-2047}:{adc_data_trans+2047};
2.有符号转无符号
wire signed [15:0] dout; // 滤波器输出
// 转化成无符号数给DAC
assign dac_data = dout[15:2] + 14'd8192;