OpenCores
URL https://opencores.org/ocsvn/turbocodes/turbocodes/trunk

Subversion Repositories turbocodes

[/] [turbocodes/] [trunk/] [src/] [myhdl/] [iteration.py] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 dbrochart
######################################################################
2
####                                                              ####
3
####  iteration.py                                                ####
4
####                                                              ####
5
####  This file is part of the turbo decoder IP core project      ####
6
####  http://www.opencores.org/projects/turbocodes/               ####
7
####                                                              ####
8
####  Author(s):                                                  ####
9
####      - David Brochart(dbrochart@opencores.org)               ####
10
####                                                              ####
11
####  All additional information is available in the README.txt   ####
12
####  file.                                                       ####
13
####                                                              ####
14
######################################################################
15
####                                                              ####
16
#### Copyright (C) 2005 Authors                                   ####
17
####                                                              ####
18
#### This source file may be used and distributed without         ####
19
#### restriction provided that this copyright statement is not    ####
20
#### removed from the file and that any derivative work contains  ####
21
#### the original copyright notice and the associated disclaimer. ####
22
####                                                              ####
23
#### This source file is free software; you can redistribute it   ####
24
#### and/or modify it under the terms of the GNU Lesser General   ####
25
#### Public License as published by the Free Software Foundation; ####
26
#### either version 2.1 of the License, or (at your option) any   ####
27
#### later version.                                               ####
28
####                                                              ####
29
#### This source is distributed in the hope that it will be       ####
30
#### useful, but WITHOUT ANY WARRANTY; without even the implied   ####
31
#### warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ####
32
#### PURPOSE. See the GNU Lesser General Public License for more  ####
33
#### details.                                                     ####
34
####                                                              ####
35
#### You should have received a copy of the GNU Lesser General    ####
36
#### Public License along with this source; if not, download it   ####
37
#### from http://www.opencores.org/lgpl.shtml                     ####
38
####                                                              ####
39
######################################################################
40
 
41
 
42
 
43
from misc import delayer
44
from interleaver import interleaver
45
from permut import zPermut, abPermut
46
from sova import sova
47
from myhdl import Signal, intbv, instances
48
 
49
def iteration(clk, rst, flipflop, a, b, y1, y2, y1Int, y2Int, zin, zout, aDec, bDec, aDel, bDel, y1Del, y2Del, y1IntDel, y2IntDel, l = 20, m = 10, q = 8, p = 48, r = 5, n = 4, delay = 0):
50
    """ Decoding iteration top level (two SOVAs).
51
 
52
    l               -- first trellis length
53
    m               -- second trellis length
54
    q               -- accumulated distance width
55
    p               -- interleaver frame size in bit couples
56
    r               -- extrinsic information width
57
    n               -- systematic data width
58
    delay           -- additional delay created by the previous iterations
59
    clk, rst        -- in  : clock and negative reset
60
    flipflop        -- in  : permutation control signal (on/off)
61
    a, b, y1, y2, y1Int, y2Int  -- in  : received decoder signals
62
    zin             -- in  : extrinsic information from the previous iteration
63
    zout            -- out : extrinsic information to the next iteration
64
    aDec, bDec      -- out : decoded signals
65
    aDel, bDel, y1Del, y2Del, y1IntDel, y2IntDel    -- out : delayed received decoder signals
66
 
67
    """
68
    # Signal declarations:
69
    aDecInt     = Signal(bool(0))
70
    bDecInt     = Signal(bool(0))
71
    zoutInt1    = [Signal(intbv(0, 0, 2**r)) for i in range(4)]
72
    zout1Perm   = [Signal(intbv(0, 0, 2**r)) for i in range(4)]
73
    aDel1       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
74
    bDel1       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
75
    aDel2       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
76
    bDel2       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
77
    y1Del1      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
78
    y2Del1      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
79
    y1Del2      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
80
    y2Del2      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
81
    y1IntDel1   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
82
    y2IntDel1   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
83
    y1IntDel3   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
84
    y2IntDel3   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
85
    y1IntDel4   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
86
    y2IntDel4   = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
87
    aDel3       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
88
    bDel3       = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
89
    abDel1Perm  = [Signal(intbv(0, -(2**(n-1)), 2**(n-1))) for i in range(2)]
90
    abDel1PermInt = [Signal(intbv(0, -(2**(n-1)), 2**(n-1))) for i in range(2)]
91
    y1Del3      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
92
    y2Del3      = Signal(intbv(0, -(2**(n-1)), 2**(n-1)))
93
    zout1       = [Signal(intbv(0, 0, 2**r)) for i in range(4)]
94
    zout2       = [Signal(intbv(0, 0, 2**r)) for i in range(4)]
95
    zout2Int    = [Signal(intbv(0, 0, 2**r)) for i in range(4)]
96
 
97
    # Instanciations:
98
    sova_i0     = sova(clk, rst, a, b, y1, y2, zin, zout1, aDec, bDec, l, m, q, r, n)
99
    zPermut_i0  = zPermut(flipflop, zout1, zout1Perm, (l + m + 2 + delay + 1) % 2)
100
    interleaver_i0  = interleaver(clk, rst, zout1Perm, zoutInt1, p, l + m + 2 + delay, 0, 2**r, 4, 0)
101
    delayer_i0  = delayer(clk, rst, a, aDel1, (l + m), -(2**(n-1)), 2**(n-1))
102
    delayer_i1  = delayer(clk, rst, b, bDel1, (l + m), -(2**(n-1)), 2**(n-1))
103
    delayer_i2  = delayer(clk, rst, y1, y1Del1, (l + m), -(2**(n-1)), 2**(n-1))
104
    delayer_i3  = delayer(clk, rst, y2, y2Del1, (l + m), -(2**(n-1)), 2**(n-1))
105
    delayer_i4  = delayer(clk, rst, y1Int, y1IntDel1, (l + m), -(2**(n-1)), 2**(n-1))
106
    delayer_i5  = delayer(clk, rst, y2Int, y2IntDel1, (l + m), -(2**(n-1)), 2**(n-1))
107
    abPermut_i0 = abPermut(flipflop, aDel1, bDel1, abDel1Perm, (l + m + 2 + delay + 1) % 2)
108
    interleaver_i1  = interleaver(clk, rst, abDel1Perm, abDel1PermInt, p, l + m + 2 + delay, -(2**(n-1)), 2**(n-1), 2, 0)
109
    delayer_i6  = delayer(clk, rst, aDel1, aDel2, p, -(2**(n-1)), 2**(n-1))
110
    delayer_i7  = delayer(clk, rst, bDel1, bDel2, p, -(2**(n-1)), 2**(n-1))
111
    delayer_i8  = delayer(clk, rst, y1Del1, y1Del2, p, -(2**(n-1)), 2**(n-1))
112
    delayer_i9  = delayer(clk, rst, y2Del1, y2Del2, p, -(2**(n-1)), 2**(n-1))
113
    sova_i1     = sova(clk, rst, abDel1PermInt[1], abDel1PermInt[0], y1IntDel1, y2IntDel1, zoutInt1, zout2, aDecInt, bDecInt, l, m, q, r, n)
114
    deinterleaver_i0    = interleaver(clk, rst, zout2, zout2Int, p, 2 * (l + m + 2) + p + delay, 0, 2**r, 4, 1)
115
    zPermut_i1  = zPermut(flipflop, zout2Int, zout, (2 * (l + m + 2) + p + delay) % 2)
116
    delayer_i10 = delayer(clk, rst, aDel2, aDel3, (l + m), -(2**(n-1)), 2**(n-1))
117
    delayer_i11 = delayer(clk, rst, bDel2, bDel3, (l + m), -(2**(n-1)), 2**(n-1))
118
    delayer_i12 = delayer(clk, rst, y1Del2, y1Del3, (l + m), -(2**(n-1)), 2**(n-1))
119
    delayer_i13 = delayer(clk, rst, y2Del2, y2Del3, (l + m), -(2**(n-1)), 2**(n-1))
120
    delayer_i14 = delayer(clk, rst, y1IntDel1, y1IntDel3, (l + m), -(2**(n-1)), 2**(n-1))
121
    delayer_i15 = delayer(clk, rst, y2IntDel1, y2IntDel3, (l + m), -(2**(n-1)), 2**(n-1))
122
    delayer_i16 = delayer(clk, rst, aDel3, aDel, p, -(2**(n-1)), 2**(n-1))
123
    delayer_i17 = delayer(clk, rst, bDel3, bDel, p, -(2**(n-1)), 2**(n-1))
124
    delayer_i18 = delayer(clk, rst, y1Del3, y1Del, p, -(2**(n-1)), 2**(n-1))
125
    delayer_i19 = delayer(clk, rst, y2Del3, y2Del, p, -(2**(n-1)), 2**(n-1))
126
    delayer_i20 = delayer(clk, rst, y1IntDel3, y1IntDel4, p, -(2**(n-1)), 2**(n-1))
127
    delayer_i21 = delayer(clk, rst, y2IntDel3, y2IntDel4, p, -(2**(n-1)), 2**(n-1))
128
    delayer_i22 = delayer(clk, rst, y1IntDel4, y1IntDel, p, -(2**(n-1)), 2**(n-1))
129
    delayer_i23 = delayer(clk, rst, y2IntDel4, y2IntDel, p, -(2**(n-1)), 2**(n-1))
130
 
131
    return sova_i0, zPermut_i0, interleaver_i0, delayer_i0, delayer_i1, delayer_i2, delayer_i3, delayer_i4, delayer_i5, abPermut_i0, interleaver_i1, delayer_i6, delayer_i7, delayer_i8, delayer_i9, sova_i1, deinterleaver_i0, zPermut_i1, delayer_i10, delayer_i11, delayer_i12, delayer_i13, delayer_i14, delayer_i15, delayer_i16, delayer_i17, delayer_i18, delayer_i19, delayer_i20, delayer_i21, delayer_i22, delayer_i23

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.