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

Subversion Repositories seqalign

[/] [seqalign/] [trunk/] [sw_gen_testbench.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 fentonc
module sw_gen_testbench;
2
            /*(clk,
3
             rst,
4
             i_targ_length,
5
             target,
6
             i_vld,
7
             i_data,
8
             o_vld,
9
             m_result
10
                );*/
11
 
12
localparam
13
    SCORE_WIDTH = 11,
14
    N_A = 2'b00,        //nucleotide "A"
15
    N_G = 2'b01,        //nucleotide "G"
16
    N_T = 2'b10,        //nucleotide "T"
17
    N_C = 2'b11,        //nucleotide "C"
18
    INS = 1,            //insertion penalty
19
    DEL = 1,            //deletion penalty
20
    TB_UP = 2'b00,      //"UP" traceback pointer
21
    TB_DIAG = 2'b01,    //"DIAG" traceback pointer
22
    TB_LEFT = 2'b10;    //"LEFT" traceback pointer
23
 
24
parameter LOGLENGTH=3;                  //log2(total number of comparison blocks instantiated)
25
parameter LENGTH = 4;      //total number of comparison blocks instantiated - target length must be less than this
26
 
27
reg rst;
28
reg clk;
29
reg i_local;
30
reg [1:0] i_data;
31
 
32
wire [LOGLENGTH-1:0] i_targ_length;            //this is the (length_of_the_actual_target_string - 1) (must be less than the max length value - 0=1 block, 1=2 blocks, etc)
33
wire [(LENGTH*2-1):0] target;                  //this is the actual target sequence - target[1:0] goes into block0, target[3:2] goes into block1, etc.
34
 
35
wire o_vld;
36
wire [SCORE_WIDTH-1:0] m_result;
37
wire [SCORE_WIDTH-1:0] i_result;
38
wire [SCORE_WIDTH-1:0] h_result;
39
wire [2*(LENGTH-1)+1:0] data;
40
 
41
reg i_vld;             //master valid signal at start of chain
42
wire vld[LENGTH-1:0];
43
wire reset[LENGTH-1:0];
44
 
45
//wire [SCORE_WIDTH*(LENGTH-1)+SCORE_WIDTH-1:0] right;
46
wire [SCORE_WIDTH-1:0] right_m [LENGTH-1:0];
47
wire [SCORE_WIDTH-1:0] right_i [LENGTH-1:0];
48
wire [SCORE_WIDTH-1:0] high  [LENGTH-1:0];
49
wire [LENGTH-1:0] gap;
50
 
51
//wire [LENGTH-1:0] done;
52
 
53
reg [SCORE_WIDTH-1:0] final_score;
54
 
55
 
56
 
57
assign o_vld = vld[3];
58
//assign m_result = right[i_targ_length];
59
 
60
assign target={N_G,N_C,N_C,N_C};
61
//assign i_targ_length = 3;
62
genvar i;
63
 
64
assign i_targ_length = 2'b11;
65
assign m_result = right_m[LENGTH-1];
66
assign i_result = right_i[LENGTH-1];
67
assign h_result = high[LENGTH-1];
68
 
69
generate
70
for (i=0; i < LENGTH; i = i + 1)
71
   begin: pe_block
72
      if (i == 0)                       //first module in auto-generated chain
73
         sw_pe_affine #(.LENGTH(LENGTH), .LOGLENGTH(LOGLENGTH))
74
            pe0 (.clk(clk),
75
             .i_rst(rst),
76
             .o_rst(reset[i]),
77
             .i_data(i_data[1:0]),
78
             .i_preload(target[1:0]),
79
             .i_left_m(11'b10000000000),
80
             .i_left_i(11'b10000000000),
81
             .i_lgap(1'b0),
82
             .i_vld(i_vld),
83
             .i_local(i_local),
84
             .o_right_m(right_m[i]),
85
             .o_right_i(right_i[i]),
86
             .i_high(11'b10000000000),
87
             .o_high(high[i]),
88
             .o_rgap(gap[i]),
89
             .o_vld(vld[i]),
90
             .o_data(data[2*i+1:2*i]),
91
             .start(1'b1));
92
             //.done(done[i]));
93
      else         //modules other than first one
94
         sw_pe_affine #(.LENGTH(LENGTH), .LOGLENGTH(LOGLENGTH))
95
            pe1 (.clk(clk),
96
             .i_rst(reset[i-1]),
97
             .o_rst(reset[i]),
98
             .i_data(data[2*(i-1)+1:(i-1)*2]),
99
             .i_preload(target[i*2+1:i*2]),
100
             .i_left_m(right_m[i-1]),
101
             .i_left_i(right_i[i-1]),
102
             .i_lgap(gap[i-1]),
103
             .i_vld(vld[i-1]),
104
             .i_local(i_local),
105
             .o_right_m(right_m[i]),
106
             .o_right_i(right_i[i]),
107
             .i_high(high[i-1]),
108
             .o_high(high[i]),
109
             .o_rgap(gap[i]),
110
             .o_vld(vld[i]),
111
             .o_data(data[2*(i)+1:2*(i)]),
112
             .start(1'b0));
113
            // .done(done[i]));
114
 
115
   end
116
 
117
endgenerate
118
 
119
 
120
 
121
 
122
initial
123
 begin
124
        $dumpfile("sw_gen_testbench.dump");
125
        $dumpvars (0,sw_gen_testbench);
126
        rst <= 1'b1;
127
        clk <= 1'b0;
128
        i_vld <= 1'b0;
129
        i_data <= 2'b00;
130
        i_local <= 1'b1;
131
        #22
132
        rst <= 1'b0;
133
        #100
134
        i_data <= N_G;
135
        i_vld <= 1'b1;
136
        #20
137
        i_data <= N_G;
138
        #20
139
        i_data <= N_G;
140
        #20
141
        i_data <= N_C;
142
        #20
143
        i_vld <= 1'b0;
144
        #200
145
        $finish();
146
 
147
 end
148
 
149
always
150
 begin
151
        #10 clk <= ~clk;
152
 end
153
 
154
 
155
 
156
 
157
 
158
 
159
 
160
endmodule

powered by: WebSVN 2.1.0

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