OpenCores
URL https://opencores.org/ocsvn/sdhc-sc-core/sdhc-sc-core/trunk

Subversion Repositories sdhc-sc-core

[/] [sdhc-sc-core/] [trunk/] [grpCrc/] [unitCrc/] [src/] [tbCrc-bhv-ea.vhdl] - Blame information for rev 185

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 164 rkastl
-- SDHC-SC-Core
2
-- Secure Digital High Capacity Self Configuring Core
3
-- 
4 170 rkastl
-- (C) Copyright 2010, Rainer Kastl
5
-- All rights reserved.
6 164 rkastl
-- 
7 170 rkastl
-- Redistribution and use in source and binary forms, with or without
8
-- modification, are permitted provided that the following conditions are met:
9
--     * Redistributions of source code must retain the above copyright
10
--       notice, this list of conditions and the following disclaimer.
11
--     * Redistributions in binary form must reproduce the above copyright
12
--       notice, this list of conditions and the following disclaimer in the
13
--       documentation and/or other materials provided with the distribution.
14
--     * Neither the name of the <organization> nor the
15
--       names of its contributors may be used to endorse or promote products
16
--       derived from this software without specific prior written permission.
17 164 rkastl
-- 
18 170 rkastl
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  "AS IS" AND
19
-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
-- DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
22
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
-- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
-- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 164 rkastl
-- 
29
-- File        : tbCrc-bhv-ea.vhdl
30
-- Owner       : Rainer Kastl
31
-- Description : Testbench
32
-- Links       : Crc-Rtl-ea.vhdl
33
-- 
34 3 rkastl
 
35
library ieee;
36
use ieee.std_logic_1164.all;
37 6 rkastl
use work.CRCs.all;
38 3 rkastl
 
39 6 rkastl
entity tbCrc is
40
end entity tbCrc;
41 3 rkastl
 
42 6 rkastl
architecture bhv of tbCrc is
43 178 rkastl
    signal Clk, ResetSync : std_ulogic := '1';
44 3 rkastl
    signal CRC_7 : std_ulogic_vector(6 downto 0);
45
    signal CRC_16 : std_ulogic_vector(15 downto 0);
46
    signal DataToCrc_7, DataToCrc_16 : std_ulogic;
47 4 rkastl
    signal CRCDataIn_7,CRCClear_7 : std_ulogic;
48
    signal CRCDataIn_16,CRCClear_16 : std_ulogic;
49
    signal SerialCRC_7, SerialCRC_16 : std_ulogic;
50 3 rkastl
 
51 5 rkastl
    signal EndOfSim : boolean := false; -- stop clock generation when true
52 3 rkastl
 
53 5 rkastl
    -- Use the negative clock edge to setup the signals in front of the positive
54
    -- edge. Therefore no extra clock cycle is needed.
55 4 rkastl
    procedure Test (
56 3 rkastl
        Data : in std_ulogic_vector;
57 4 rkastl
        Valid : in std_ulogic_vector;
58
        signal CRC : in std_ulogic_vector;
59
        signal SerialCRC : in std_ulogic;
60
        signal CRCDataIn : out std_ulogic;
61 3 rkastl
        signal DataToCrc : out std_ulogic;
62
        signal CRCClear : out std_ulogic) is
63
 
64
        variable counter : natural := 0;
65 4 rkastl
 
66 3 rkastl
    begin
67 4 rkastl
        wait until Clk = '0';
68 5 rkastl
        -- shift data in
69 3 rkastl
        CRCClear <= '0';
70 4 rkastl
        CRCDataIn <= '1';
71 3 rkastl
 
72
        while (counter <= Data'high) loop
73
            DataToCrc <= Data(counter);
74
            counter := counter + 1;
75 4 rkastl
            wait until Clk = '0';
76 3 rkastl
        end loop;
77
 
78 5 rkastl
        -- compare parallel output
79 4 rkastl
        CRCDataIn <= '0';
80 3 rkastl
 
81 4 rkastl
        assert (Valid = CRC) report "CRC error." severity error;
82 3 rkastl
 
83 5 rkastl
        -- compare serial output
84 4 rkastl
        counter := 0;
85
        while (counter <= CRC'high) loop
86
            assert (Valid(counter) = SerialCRC) report "Serial CRC error"
87
            severity error;
88
            counter := counter + 1;
89 8 rkastl
                        wait until clk = '0';
90 4 rkastl
        end loop;
91
 
92 5 rkastl
        -- clear the registers, not needed after shifting the serial data out
93 3 rkastl
        CRCClear <= '1';
94 4 rkastl
        wait until Clk = '0';
95 3 rkastl
 
96 4 rkastl
        CRCClear <= '0';
97 3 rkastl
    end procedure;
98
 
99
begin
100
 
101
    Clk <= not Clk after 10 ns when EndOfSim = false else '0';
102 178 rkastl
    ResetSync <= '0' after 100 ns;
103 3 rkastl
 
104 4 rkastl
    generate_and_test7 : process is
105 3 rkastl
        procedure Test7(
106
            Data : in std_ulogic_vector;
107
            Valid : in std_ulogic_vector) is
108
        begin
109 4 rkastl
            Test(Data, Valid, CRC_7, SerialCRC_7, CRCDataIn_7, DataToCrc_7,
110
                CRCClear_7);
111 3 rkastl
        end procedure;
112
 
113
        procedure Test16(
114
            Data : in std_ulogic_vector;
115
            Valid : in std_ulogic_vector) is
116
        begin
117 4 rkastl
            Test(Data, Valid, CRC_16, SerialCRC_16, CRCDataIn_16, DataToCrc_16,
118
                CRCClear_16);
119 3 rkastl
        end procedure;
120
 
121
        variable data : std_ulogic_vector(0 to (512*8)-1) := (others => '1');
122
    begin
123 178 rkastl
        wait until (ResetSync = '0');
124 3 rkastl
 
125
        Test7("0100000000000000000000000000000000000000","1001010");
126 4 rkastl
        Test7("01000000000000000000000000000000000000001001010","0000000");
127 3 rkastl
        Test7("0101000100000000000000000000000000000000","0101010");
128 4 rkastl
        Test7("01010001000000000000000000000000000000000101010","0000000");
129 3 rkastl
        Test7("0001000100000000000000000000100100000000","0110011");
130 4 rkastl
        Test7("00010001000000000000000000001001000000000110011","0000000");
131 55 rkastl
                Test7("000010000000000000000000000000000110101010", "0000111");
132 61 rkastl
                Test7("0001110100101001011100000000111011000110000010110100101101011001001010110010101110100011101100001111001000000001100101110001000",
133
                "0000000");
134 34 rkastl
 
135 3 rkastl
        Test16(data, X"7FA1");
136 11 rkastl
        Test16(X"1234567890ABCDEF", X"2FBC");
137 5 rkastl
        Test16(X"1234567890ABCDEF2FBC", X"0000");
138
        Test16(X"F0F0F0F0F0F0F0F0F0F0", X"63E2");
139
        Test16(X"F0F0F0F0F0F0F0F0F0F063E2", X"0000");
140 3 rkastl
 
141
        EndOfSim <= true;
142
        report "Simulation finished." severity note;
143
    end process;
144
 
145
    duv7: entity work.crc
146
    port map (iClk => Clk,
147 178 rkastl
        iRstSync => ResetSync,
148 4 rkastl
        iDataIn => CRCDataIn_7,
149 105 rkastl
                iStrobe => '1',
150 3 rkastl
        iClear => CRCClear_7,
151
        iData => DataToCrc_7,
152 4 rkastl
        oParallel => CRC_7,
153
        oSerial => SerialCRC_7);
154 3 rkastl
 
155
    duv16: entity work.crc
156
    generic map (gPolynom => crc16)
157
    port map (iClk => Clk,
158 178 rkastl
        iRstSync => ResetSync,
159 4 rkastl
        iDataIn => CRCDataIn_16,
160 105 rkastl
                iStrobe => '1',
161 3 rkastl
        iClear => CRCClear_16,
162
        iData => DataToCrc_16,
163 4 rkastl
        oParallel => CRC_16,
164
        oSerial => SerialCRC_16);
165 3 rkastl
 
166 6 rkastl
end architecture bhv;

powered by: WebSVN 2.1.0

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