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

Subversion Repositories turbocodes

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 dbrochart
######################################################################
2
####                                                              ####
3
####  extInf.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 myhdl import Signal, intbv, instance
44
 
45
def extInf(llr0, llr1, llr2, llr3, zin, a, b, zout, r = 5, n = 4, q = 8):
46
    """ Extrinsic information.
47
 
48
    r       -- extrinsic information width
49
    n       -- systematic data width
50
    q       -- accumulated distance width
51
    llr0    -- in  : LLR for (a, b) = (0, 0)
52
    llr1    -- in  : LLR for (a, b) = (0, 1)
53
    llr2    -- in  : LLR for (a, b) = (1, 0)
54
    llr3    -- in  : LLR for (a, b) = (1, 1)
55
    zin     -- in  : extrinsic information input signal
56
    a, b    -- in  : decoder systematic input signals
57
    zout    -- out : extrinsic information output signal
58
 
59
    """
60
    a_plus_b = intbv(0, -(2**(n-1)), 2**(n-1))
61
    a_min_b = intbv(0, -(2**(n-1)), 2**(n-1))
62
    tmp = [intbv(0, -(2**(n-1)) - (2**r), 2**q + 2**(n-1)) for i in range(7)]
63
    tmp2 = [intbv(0, 0, 2**q + 2**(n-1) + (2**(n-1)) + (2**r)) for i in range(4)]
64
    @instance
65
    def extInfLogic():
66
        while 1:
67
            a_plus_b = (a.val + b.val) / 2
68
            a_min_b = (a.val - b.val) / 2
69
            tmp[0] = llr0.val - a_plus_b - zin[0].val
70
            tmp[1] = llr1.val - a_min_b  - zin[1].val
71
            tmp[2] = llr2.val + a_min_b  - zin[2].val
72
            tmp[3] = llr3.val + a_plus_b - zin[3].val
73
            if tmp[0] < tmp[1]:
74
                tmp[4] = tmp[0]
75
            else:
76
                tmp[4] = tmp[1]
77
            if tmp[2] < tmp[3]:
78
                tmp[5] = tmp[2]
79
            else:
80
                tmp[5] = tmp[3]
81
            if tmp[4] < tmp[5]:
82
                tmp[6] = tmp[4]
83
            else:
84
                tmp[6] = tmp[5]
85
            tmp2[0] = intbv(tmp[0] - tmp[6])
86
            tmp2[1] = intbv(tmp[1] - tmp[6])
87
            tmp2[2] = intbv(tmp[2] - tmp[6])
88
            tmp2[3] = intbv(tmp[3] - tmp[6])
89
            if tmp2[0] >= 2**r:
90
                zout[0].next = 2**r - 1
91
            else:
92
                zout[0].next = tmp2[0]
93
            if tmp2[1] >= 2**r:
94
                zout[1].next = 2**r - 1
95
            else:
96
                zout[1].next = tmp2[1]
97
            if tmp2[2] >= 2**r:
98
                zout[2].next = 2**r - 1
99
            else:
100
                zout[2].next = tmp2[2]
101
            if tmp2[3] >= 2**r:
102
                zout[3].next = 2**r - 1
103
            else:
104
                zout[3].next = tmp2[3]
105
            yield llr0, llr1, llr2, llr3, zin[0], zin[1], zin[2], zin[3], a, b
106
    return extInfLogic

powered by: WebSVN 2.1.0

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