182 lines
6.3 KiB
Coq
182 lines
6.3 KiB
Coq
|
module DAC_DEM ( clk_in,
|
||
|
data_in,
|
||
|
prbs_en,
|
||
|
set,
|
||
|
DEM_LSB_OUT,
|
||
|
DEM_ISB_OUT,
|
||
|
DEM_MSB_OUT
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
input clk_in, prbs_en;
|
||
|
input [15:0] data_in;
|
||
|
input [14:0] set;
|
||
|
output [8:0] DEM_LSB_OUT;
|
||
|
output [6:0] DEM_ISB_OUT;
|
||
|
output [14:0] DEM_MSB_OUT;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
reg [14:0]r_shift_data;
|
||
|
|
||
|
always @(posedge clk_in or negedge prbs_en)
|
||
|
begin
|
||
|
if(!prbs_en)
|
||
|
|
||
|
r_shift_data <=set;
|
||
|
|
||
|
else
|
||
|
|
||
|
begin
|
||
|
|
||
|
r_shift_data[0] <=r_shift_data[14]^r_shift_data[13];
|
||
|
|
||
|
r_shift_data[1] <= r_shift_data[0];
|
||
|
|
||
|
r_shift_data[2] <= r_shift_data[1];
|
||
|
|
||
|
r_shift_data[3] <= r_shift_data[2];
|
||
|
|
||
|
r_shift_data[4] <= r_shift_data[3];
|
||
|
|
||
|
r_shift_data[5] <= r_shift_data[4];
|
||
|
|
||
|
r_shift_data[6] <= r_shift_data[5];
|
||
|
|
||
|
r_shift_data[7] <= r_shift_data[6];
|
||
|
|
||
|
r_shift_data[8] <= r_shift_data[7];
|
||
|
|
||
|
r_shift_data[9] <= r_shift_data[8];
|
||
|
|
||
|
r_shift_data[10] <= r_shift_data[9];
|
||
|
|
||
|
r_shift_data[11] <= r_shift_data[10];
|
||
|
|
||
|
r_shift_data[12] <= r_shift_data[11];
|
||
|
|
||
|
r_shift_data[13] <= r_shift_data[12];
|
||
|
|
||
|
r_shift_data[14] <= r_shift_data[13];
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
wire [3:0]dd;
|
||
|
wire [2:0]ddi;
|
||
|
assign dd = {r_shift_data[0],r_shift_data[5], r_shift_data[10],r_shift_data[14]};
|
||
|
|
||
|
assign ddi = { r_shift_data[3], r_shift_data[7], r_shift_data[12]};
|
||
|
|
||
|
|
||
|
|
||
|
reg [14:0] r_MSB_BUF0;
|
||
|
|
||
|
always @(posedge clk_in)
|
||
|
|
||
|
begin
|
||
|
|
||
|
case(dd[3:0])
|
||
|
|
||
|
4'd0: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12]};
|
||
|
|
||
|
4'd1: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15]};
|
||
|
|
||
|
4'd2: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd3: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd4: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd5: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd6: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd7: r_MSB_BUF0 <= {data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd8: r_MSB_BUF0 <= {data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15]};
|
||
|
|
||
|
4'd9: r_MSB_BUF0 <= {data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14]};
|
||
|
|
||
|
4'd10: r_MSB_BUF0 <= {data_in[14],data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14]};
|
||
|
|
||
|
4'd11: r_MSB_BUF0 <= {data_in[14],data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14]};
|
||
|
|
||
|
4'd12: r_MSB_BUF0 <= {data_in[13],data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14]};
|
||
|
|
||
|
4'd13: r_MSB_BUF0 <= {data_in[13],data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13]};
|
||
|
|
||
|
4'd14: r_MSB_BUF0 <= {data_in[12],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13]};
|
||
|
|
||
|
4'd15: r_MSB_BUF0 <= {data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[15],data_in[14],data_in[14],data_in[14],data_in[14],data_in[13],data_in[13],data_in[12]};
|
||
|
|
||
|
|
||
|
endcase
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
reg [6:0] r_ISB_BUF0;
|
||
|
|
||
|
always @(posedge clk_in)
|
||
|
|
||
|
begin
|
||
|
|
||
|
case(ddi[2:0])
|
||
|
|
||
|
3'd0: r_ISB_BUF0 <= {data_in[11],data_in[11],data_in[11],data_in[11],data_in[10],data_in[10],data_in[9]};
|
||
|
|
||
|
3'd1: r_ISB_BUF0 <= {data_in[11],data_in[11],data_in[11],data_in[10],data_in[10],data_in[9],data_in[11]};
|
||
|
|
||
|
3'd2: r_ISB_BUF0 <= {data_in[11],data_in[11],data_in[10],data_in[10],data_in[9],data_in[11],data_in[11]};
|
||
|
|
||
|
3'd3: r_ISB_BUF0 <= {data_in[11],data_in[10],data_in[10],data_in[9],data_in[11],data_in[11],data_in[11]};
|
||
|
|
||
|
3'd4: r_ISB_BUF0 <= {data_in[10],data_in[10],data_in[9],data_in[11],data_in[11],data_in[11],data_in[11]};
|
||
|
|
||
|
3'd5: r_ISB_BUF0 <= {data_in[10],data_in[9],data_in[11],data_in[11],data_in[11],data_in[11],data_in[10]};
|
||
|
|
||
|
3'd6: r_ISB_BUF0 <= {data_in[9],data_in[11],data_in[11],data_in[11],data_in[11],data_in[10],data_in[10]};
|
||
|
|
||
|
3'd7: r_ISB_BUF0 <= {data_in[11],data_in[11],data_in[11],data_in[11],data_in[10],data_in[10],data_in[9]};
|
||
|
|
||
|
endcase
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
reg [8:0] r_LSB_BUF0;
|
||
|
|
||
|
always @(posedge clk_in)
|
||
|
|
||
|
begin
|
||
|
|
||
|
r_LSB_BUF0 <= {data_in[8],data_in[7],data_in[6],data_in[5],data_in[4],data_in[3],data_in[2],data_in[1],data_in[0]};
|
||
|
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
assign DEM_LSB_OUT = r_LSB_BUF0;
|
||
|
|
||
|
assign DEM_ISB_OUT = r_ISB_BUF0;
|
||
|
|
||
|
assign DEM_MSB_OUT = r_MSB_BUF0;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
endmodule
|
||
|
|