[verilog] aansturen ad570

Pagina: 1
Acties:

  • Inge801
  • Registratie: Januari 2002
  • Niet online

Inge801

Iron Maiden

Topicstarter
Ik wil een verilog module maken die de ad570 convertor aanstuurt, maar ik heb totaal geen verilog ervaring.

Het ic moet een puls krijgen dat hij begint met rekenen, na 25 us is hij klaar met rekenen en staan de binaire digitale waardes op de ic's, die wil ik inlezen met verilog.

Dus ik dacht ik maak een state convert en een state get, maar ziet iemand wat ik allemaal fout doe en hoe dit beter kan.

Omdat mijn interne clock op 25 MHz draait heb ik maar een aparte klok puls gemaakt.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
module convert(clk,start,res,puls,bin_in,bin_uit,calculate);
     input clk;
     input res;
     input start;
     input puls;
    input [0:7] bin_in;
    output [0:7] bin_uit; reg [0:7] bin_uit;
     output calculate; reg calculate;

     parameter Msize = 3; // 2^(Msize+1) >= # states
                            // 2^Msize < # states

     reg [0:7] vorige;   
//   vorige = 0;

parameter [Msize:0] //synopsys enum STATE_TYPE
    Swait = 0,
     Sconvert=1,
     Sget = 2;




// Declare current state and next state variables
reg [Msize:0] /* synopsys enum STATE_TYPE */ CS;
reg [Msize:0] /* synopsys enum STATE_TYPE */ NS;
 
//synopsys state_vector CS
always @ (posedge clk or posedge res)
    begin                   // The clocking of the state register CS
       if (res) CS = Swait;
       else  CS = NS;
    end
 
    always @ (CS or puls)
    begin               // The next state and output functions
       case (CS) //synopsys full_case
Swait:   begin   
                        bin_uit = 0;
                        calculate = 0;
                       if (start) begin // start is active low !
                                    NS = Sconvert;
                             end
                              else begin
                                    NS = Swait;
                              end
                end
Sconvert: begin  
                         calculate=1;
                         bin_uit = vorige;
                         if (puls) begin
                                NS = Sget;
                         end
                         else begin
                               NS = Sconvert;
                         end
                  end
 Sget:    begin 
                         calculate=0;
                         bin_uit = bin_in;
                         vorige = bin_in;
                         if (puls==0) begin
                                NS = Sconvert;
                         end
                         else begin
                               NS = Sget;
                         end
             end
        endcase
    end

endmodule

你还记得吗 记忆的炎夏