-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpn_dac.v
94 lines (80 loc) · 2.35 KB
/
pn_dac.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: jplathuile
// Engineer: Xynium FM4PN
//
// Create Date: 06.01.2019 08:09:42
// Design Name:
// Module Name: pn_dac
// Project Name:
// Target Devices: Zynq
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module PN_Dac #(
parameter integer DAC_DATA_WIDTH = 14,
parameter integer IN_DATA_WIDTH = 16
)
(
input wire clk,
input wire ddr_clk,
input wire locked,
// DAC signals
(* X_INTERFACE_PARAMETER = "FREQ_HZ 250000000" *)
output wire dac_clk,
output wire dac_rst,
output wire dac_sel,
output wire dac_wrt,
output wire [DAC_DATA_WIDTH-1:0] dac_dat,
input wire [IN_DATA_WIDTH-1:0] Idata,
input wire [IN_DATA_WIDTH-1:0] Qdata
);
reg [DAC_DATA_WIDTH-1:0] rIdat;
reg [DAC_DATA_WIDTH-1:0] rQdat;
//reg int_rst_reg;
wire [DAC_DATA_WIDTH-2:0] IdtaBts;
wire [DAC_DATA_WIDTH-2:0] QdtaBts;
assign IdtaBts =Idata[IN_DATA_WIDTH-2:2];
assign QdtaBts =Qdata[IN_DATA_WIDTH-2:2];
genvar j;
always @(posedge clk)
begin
if(~locked)
begin
rIdat <= {(DAC_DATA_WIDTH){1'b0}};
rQdat <= {(DAC_DATA_WIDTH){1'b0}};
end
else
begin
rIdat <= {Idata[IN_DATA_WIDTH-1], ~IdtaBts};
rQdat <= {Qdata[IN_DATA_WIDTH-1], ~QdtaBts};
end
//int_rst_reg <= ~locked ;
end
//ODDR ODDR_rst(.Q(dac_rst), .D1(int_rst_reg), .D2(int_rst_reg), .C(clk), .CE(1'b1), .R(1'b0), .S(1'b0));
assign dac_rst = 1'b0;
ODDR ODDR_sel(.Q(dac_sel), .D1(1'b0), .D2(1'b1), .C(clk), .CE(1'b1), .R(1'b0), .S(1'b0));
ODDR ODDR_wrt(.Q(dac_wrt), .D1(1'b0), .D2(1'b1), .C(ddr_clk), .CE(1'b1), .R(1'b0), .S(1'b0));
ODDR ODDR_clk(.Q(dac_clk), .D1(1'b0), .D2(1'b1), .C(ddr_clk), .CE(1'b1), .R(1'b0), .S(1'b0));
generate
for(j = 0; j < DAC_DATA_WIDTH; j = j + 1)
begin : DAC_DAT
ODDR ODDR_inst(
.Q(dac_dat[j]),
.D1(rIdat[j]),
.D2(rQdat[j]),
.C(clk),
.CE(1'b1),
.R(1'b0),
.S(1'b0)
);
end
endgenerate
endmodule