-
Notifications
You must be signed in to change notification settings - Fork 2
/
control_module.v
143 lines (131 loc) · 3.8 KB
/
control_module.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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
`timescale 1ns / 1ps
`default_nettype none
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 11/26/2021 12:00:45 PM
// Design Name:
// Module Name: control_module
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module control_module#
(
parameter WORD_SIZE = 32,
parameter SIZE_WORD = 3,
parameter AUXILIAR_SIZE = 44,
parameter IO_OUTPUT_SIZE = 8,
parameter INPUT_DATA_SIZE = 52,
parameter STATUS_SIGNALS = 6,
parameter DATA_WIDTH = 8,
parameter OUTPUTS = 32,
parameter INPUTS = 32,
parameter INSTRUCTION_SIZE = 3,
parameter SIZE_WORD_REGISTER = 3
)
(
input clk,
input rtx,
input rst,
input [15:0] preescalar_data_rate,
input [INPUTS-1:0] input_io,
output [STATUS_SIGNALS-1:0]staus_control_module, // TODO possible expansion of that
output trx,
output valid_io,
output [OUTPUTS-1:0] output_io
);
// connection wires
wire busy_io_module;
wire busy_sender_data;
wire [INSTRUCTION_SIZE-1:0] instrucction;
wire [SIZE_WORD_REGISTER-1:0] register;
wire [AUXILIAR_SIZE-1:0] auxiliar_register;
wire valid_instrucction;
wire valid_control_value;
// control value
wire [INPUT_DATA_SIZE-1:0] control_value;
wire [WORD_SIZE-1:0] send_data_register;
wire valid_data;
wire [SIZE_WORD-1:0] size_line;
wire [IO_OUTPUT_SIZE-1:0] result_input_io;
// assigments
assign staus_control_module[4] = busy_io_module;
assign staus_control_module[5] = busy_sender_data;
// status sender module
status_sender_data #(
.WORD_SIZE(WORD_SIZE),
.SIZE_WORD(SIZE_WORD),
.STATUS_SIGNALS(STATUS_SIGNALS),
.DATA_WIDTH(DATA_WIDTH),
.INPUT_DATA_SIZE(INPUT_DATA_SIZE)
)
status_sender_data_inst(
.clk(clk),
.rst(rst),
.rxd(rtx),
.size_of_data(size_line),
.data_to_send(send_data_register),
.preescalar_value (preescalar_data_rate),
.valid_data(valid_data),
.valid_control_value(valid_control_value),
.control_value(control_value),
.busy(busy_sender_data),
.control_uart(staus_control_module[3:0]),
.txd(trx)
);
io_module #(
.SIZE_WORD(SIZE_WORD),
.WORD_SIZE(WORD_SIZE),
.INSTRUCTION_SIZE(INSTRUCTION_SIZE),
.OUTPUTS(OUTPUTS),
.INPUTS(INPUTS),
.IO_OUTPUT_SIZE(IO_OUTPUT_SIZE)
)
io_module_inst (
.clk(clk),
.rst(rst),
.busy(busy_io_module),
.instrucction(instrucction),
.register(register),
.auxiliar_register(auxiliar_register),
.valid_instrucction(valid_instrucction),
.input_io(input_io),
.valid_io(valid_io),
.output_io(output_io),
.result_input_io(result_input_io)
);
logic_control #(
.WORD_SIZE(WORD_SIZE),
.SIZE_WORD(SIZE_WORD),
.INPUT_DATA_SIZE(INPUT_DATA_SIZE),
.STATUS_SIGNALS(STATUS_SIGNALS),
.DATA_WIDTH(DATA_WIDTH)
)
logic_control_inst (
.clk(clk),
.rst(rst),
.valid_data(valid_data),
.result_input_io(result_input_io),
.valid_control_value(valid_control_value),
.control_value(control_value),
.busy_sender_data(busy_sender_data),
.busy_io_module(busy_io_module),
.size_line(size_line),
.send_data_register(send_data_register),
.instrucction(instrucction),
.register(register),
.auxiliar_register(auxiliar_register),
.valid_instrucction(valid_instrucction)
);
endmodule
`default_nettype wire