63 lines
1.8 KiB
Verilog

//============================================================================================
/*
* #Author : sterben(Duan)
* #LastAuthor : sterben(Duan)
* #Date : 2019-09-27 00:00:34
* #lastTime : 2020-01-22 23:54:59
* #FilePath : src\Driver\DAC_driver\DAC9767_driver\DA9767.v
* #Description : port:
*/
//============================================================================================
module DA9767 #
(
parameter INPUT_WIDTH = 14,
parameter INPUT_STYLE = "signed",
parameter ALIGNED_STYLE = "LSB"
)
(
input clk_in,
input [INPUT_WIDTH - 1 : 0] DA_data,
output DA_clk,
output DA_wrt,
output [13:0] DA_out
);
generate if(INPUT_STYLE == "signed") begin : OUTPUT
if (INPUT_WIDTH < 14) begin
localparam DATA_WIDTH = 14 - INPUT_WIDTH;
if (ALIGNED_STYLE == "LSB") begin
assign DA_out = $signed({{DATA_WIDTH{DA_data[INPUT_WIDTH-1]}},DA_data})
+ $signed(14'd8192);
end
else if(ALIGNED_STYLE == "MSB") begin
reg [DATA_WIDTH - 1 : 0 ] data_buf = 0;
assign DA_out = $signed({DA_data,data_buf}) + $signed(14'd8192);
end
end
else begin
assign DA_out = $signed(DA_data[INPUT_WIDTH - 1 : INPUT_WIDTH - 14]) + $signed(14'd8192);
end
end
else if(INPUT_STYLE == "unsigned") begin
if (INPUT_WIDTH < 14) begin
localparam DATA_WIDTH = 14 - INPUT_WIDTH;
if (ALIGNED_STYLE == "LSB") begin
assign DA_out = {{DATA_WIDTH{DA_data[INPUT_WIDTH-1]}},DA_data};
end
else if(ALIGNED_STYLE == "MSB") begin
reg [DATA_WIDTH - 1 : 0 ] data_buf = 0;
assign DA_out = {DA_data,data_buf};
end
end
else begin
assign DA_out = DA_data[INPUT_WIDTH - 1 : INPUT_WIDTH - 14];
end
end
endgenerate
assign DA_clk = clk_in;
assign DA_wrt = clk_in;
endmodule