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.
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 |
你还记得吗 记忆的炎夏