§ Делитель
Зависимости:
модуль divmod- WIDTH — битность шины
- STAGE — сколько пройти стадий деления
Запрашивается a/b, получая q (результат) и r (остаток), но это справедливо только тогда, когда количество стадий совпадает с битностью.
1module div
2#(
3 parameter WIDTH = 8,
4 parameter STAGE = 8
5)
6(
7 input wire [(WIDTH-1):0] a,
8 input wire [(WIDTH-1):0] b,
9 output wire [(WIDTH-1):0] q,
10 output wire [(WIDTH-1):0] r
11);
12
13assign q = qo[STAGE-1];
14assign r = ro[STAGE-1];
15
16wire [(WIDTH-1):0] ro[STAGE];
17wire [(WIDTH-1):0] qo[STAGE];
18wire [(WIDTH-1):0] zero = 1'b0;
19
20divmod #(.WIDTH( WIDTH )) UnitDivMod
21(
22 .b (b),
23 .q (a), .r (zero),
24 .qo (qo[0]), .ro (ro[0])
25);
26
27genvar i;
28generate
29
30for (i = 0; i < STAGE-1; i=i+1) begin : DivModX
31divmod #(.WIDTH(WIDTH)) UnitDivMod
32(
33 .b (b),
34 .q (qo[i ]), .r (ro[i ]),
35 .qo (qo[i+1]), .ro (ro[i+1])
36);
37end
38
39endgenerate
40
41endmodule