-
Notifications
You must be signed in to change notification settings - Fork 0
/
wrapper.v
122 lines (109 loc) · 3.29 KB
/
wrapper.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
`default_nettype none
`ifdef FORMAL
`define MPRJ_IO_PADS 38
`endif
//`define USE_WB 0
`define USE_LA 1
`define USE_IO 1
//`define USE_MEM 0
//`define USE_IRQ 0
module wrapped_rgb_mixer (
`ifdef USE_POWER_PINS
inout vccd1,
inout vssd1,
`endif
// interface as user_proj_example.v
input wire wb_clk_i,
`ifdef USE_WB
input wire wb_rst_i,
input wire wbs_stb_i,
input wire wbs_cyc_i,
input wire wbs_we_i,
input wire [3:0] wbs_sel_i,
input wire [31:0] wbs_dat_i,
input wire [31:0] wbs_adr_i,
output wire wbs_ack_o,
output wire [31:0] wbs_dat_o,
`endif
// Logic Analyzer Signals
// only provide first 32 bits to reduce wiring congestion
`ifdef USE_LA
input wire [31:0] la1_data_in,
output wire [31:0] la1_data_out,
input wire [31:0] la1_oenb,
`endif
// IOs
`ifdef USE_IO
input wire [`MPRJ_IO_PADS-1:0] io_in,
output wire [`MPRJ_IO_PADS-1:0] io_out,
output wire [`MPRJ_IO_PADS-1:0] io_oeb,
`endif
// IRQ
`ifdef USE_IRQ
output wire [2:0] irq,
`endif
`ifdef USE_CLK2
// extra user clock
input wire user_clock2,
`endif
// active input, only connect tristated outputs if this is high
input wire active
);
// all outputs must be tristated before being passed onto the project
wire buf_wbs_ack_o;
wire [31:0] buf_wbs_dat_o;
wire [31:0] buf_la1_data_out;
wire [`MPRJ_IO_PADS-1:0] buf_io_out;
wire [`MPRJ_IO_PADS-1:0] buf_io_oeb;
wire [2:0] buf_irq;
`ifdef FORMAL
// formal can't deal with z, so set all outputs to 0 if not active
`ifdef USE_WB
assign wbs_ack_o = active ? buf_wbs_ack_o : 1'b0;
assign wbs_dat_o = active ? buf_wbs_dat_o : 32'b0;
`endif
`ifdef USE_LA
assign la1_data_out = active ? buf_la1_data_out : 32'b0;
`endif
`ifdef USE_IO
assign io_out = active ? buf_io_out : {`MPRJ_IO_PADS{1'b0}};
assign io_oeb = active ? buf_io_oeb : {`MPRJ_IO_PADS{1'b0}};
`endif
`ifdef USE_IRQ
assign irq = active ? buf_irq : 3'b0;
`endif
`include "properties.v"
`else
// tristate buffers
`ifdef USE_WB
assign wbs_ack_o = active ? buf_wbs_ack_o : 1'bz;
assign wbs_dat_o = active ? buf_wbs_dat_o : 32'bz;
`endif
`ifdef USE_LA
assign la1_data_out = active ? buf_la1_data_out : 32'bz;
`endif
`ifdef USE_IO
assign io_out = active ? buf_io_out : {`MPRJ_IO_PADS{1'bz}};
assign io_oeb = active ? buf_io_oeb : {`MPRJ_IO_PADS{1'bz}};
`endif
`ifdef USE_IRQ
assign irq = active ? buf_irq : 3'bz;
`endif
`endif
// permanently set oeb so that outputs are always enabled: 0 is output, 1 is high-impedance
assign buf_io_oeb = {`MPRJ_IO_PADS{1'b0}};
// instantiate your module here, connecting what you need of the above signals
rgb_mixer rgb_mixer0(
.clk (wb_clk_i),
.reset (la1_data_in[0]),
.enc0_a (io_in[8]),
.enc0_b (io_in[9]),
.enc1_a (io_in[10]),
.enc1_b (io_in[11]),
.enc2_a (io_in[12]),
.enc2_b (io_in[13]),
.pwm0_out (buf_io_out[14]),
.pwm1_out (buf_io_out[15]),
.pwm2_out (buf_io_out[16]));
endmodule
`default_nettype wire