OpenCores
URL https://opencores.org/ocsvn/connect-6/connect-6/trunk

Subversion Repositories connect-6

[/] [connect-6/] [trunk/] [BUILD_SCC/] [DE2/] [async_transmitter_altera.v] - Blame information for rev 17

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 sumanta.ch
module async_transmitter(clk, TxD_start, TxD_data, TxD, TxD_busy);
2
input clk, TxD_start;
3
input [7:0] TxD_data;
4
output TxD, TxD_busy;
5
 
6 8 sumanta.ch
//parameter ClkFrequency = 62500000; // 60MHz
7
parameter ClkFrequency = 50000000; // 50MHz
8
//parameter ClkFrequency = 27000000; // 27MHz
9 4 sumanta.ch
parameter Baud = 115200;
10
 
11
// Baud generator
12
parameter BaudGeneratorAccWidth = 16;
13
parameter BaudGeneratorInc = ((Baud<<(BaudGeneratorAccWidth-4))+(ClkFrequency>>5))/(ClkFrequency>>4);
14
reg [BaudGeneratorAccWidth:0] BaudGeneratorAcc;
15
wire BaudTick = BaudGeneratorAcc[BaudGeneratorAccWidth];
16
wire TxD_busy;
17
always @(posedge clk) if(TxD_busy) BaudGeneratorAcc <= BaudGeneratorAcc[BaudGeneratorAccWidth-1:0] + BaudGeneratorInc;
18
 
19
// Transmitter state machine
20
reg [3:0] state;
21
assign TxD_busy = (state!=0);
22
 
23
always @(posedge clk)
24
case(state)
25
  4'b0000: if(TxD_start) state <= 4'b0100;
26
  4'b0100: if(BaudTick) state <= 4'b1000;  // start
27
  4'b1000: if(BaudTick) state <= 4'b1001;  // bit 0
28
  4'b1001: if(BaudTick) state <= 4'b1010;  // bit 1
29
  4'b1010: if(BaudTick) state <= 4'b1011;  // bit 2
30
  4'b1011: if(BaudTick) state <= 4'b1100;  // bit 3
31
  4'b1100: if(BaudTick) state <= 4'b1101;  // bit 4
32
  4'b1101: if(BaudTick) state <= 4'b1110;  // bit 5
33
  4'b1110: if(BaudTick) state <= 4'b1111;  // bit 6
34
  4'b1111: if(BaudTick) state <= 4'b0001;  // bit 7
35
  4'b0001: if(BaudTick) state <= 4'b0010;  // stop1
36
  4'b0010: if(BaudTick) state <= 4'b0000;  // stop2
37
  default: if(BaudTick) state <= 4'b0000;
38
endcase
39
 
40
// Output mux
41
reg muxbit;
42
always @(state[2:0] or TxD_data)
43
case(state[2:0])
44
  0: muxbit <= TxD_data[0];
45
  1: muxbit <= TxD_data[1];
46
  2: muxbit <= TxD_data[2];
47
  3: muxbit <= TxD_data[3];
48
  4: muxbit <= TxD_data[4];
49
  5: muxbit <= TxD_data[5];
50
  6: muxbit <= TxD_data[6];
51
  7: muxbit <= TxD_data[7];
52
endcase
53
 
54
// Put together the start, data and stop bits
55
reg TxD;
56
always @(posedge clk) TxD <= (state<4) | (state[3] & muxbit);  // register the output to make it glitch free
57
 
58
endmodule

powered by: WebSVN 2.1.0

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