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

Subversion Repositories uart2bus

[/] [uart2bus/] [trunk/] [verilog/] [rtl/] [baud_gen.v] - Diff between revs 2 and 3

Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 3
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
// baud rate generator for uart 
// baud rate generator for uart 
//
//
// this module has been changed to receive the baud rate dividing counter from registers.
// this module has been changed to receive the baud rate dividing counter from registers.
// the two registers should be calculated as follows:
// the two registers should be calculated as follows:
// first register:
// first register:
//              baud_freq = 16*baud_rate / gcd(global_clock_freq, 16*baud_rate)
//              baud_freq = 16*baud_rate / gcd(global_clock_freq, 16*baud_rate)
// second register:
// second register:
//              baud_limit = (global_clock_freq / gcd(global_clock_freq, 16*baud_rate)) - baud_freq 
//              baud_limit = (global_clock_freq / gcd(global_clock_freq, 16*baud_rate)) - baud_freq 
 
//
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
 
 
module baud_gen
module baud_gen
(
(
        clock, reset,
        clock, reset,
        ce_16, baud_freq, baud_limit
        ce_16, baud_freq, baud_limit
);
);
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
// modules inputs and outputs 
// modules inputs and outputs 
input                   clock;          // global clock input 
input                   clock;          // global clock input 
input                   reset;          // global reset input 
input                   reset;          // global reset input 
output                  ce_16;          // baud rate multiplyed by 16 
output                  ce_16;          // baud rate multiplyed by 16 
input   [11:0]   baud_freq;      // baud rate setting registers - see header description 
input   [11:0]   baud_freq;      // baud rate setting registers - see header description 
input   [15:0]   baud_limit;
input   [15:0]   baud_limit;
 
 
// internal registers 
// internal registers 
reg ce_16;
reg ce_16;
reg [15:0]       counter;
reg [15:0]       counter;
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
// module implementation 
// module implementation 
// baud divider counter  
// baud divider counter  
always @ (posedge clock or posedge reset)
always @ (posedge clock or posedge reset)
begin
begin
        if (reset)
        if (reset)
                counter <= 16'b0;
                counter <= 16'b0;
        else if (counter >= baud_limit)
        else if (counter >= baud_limit)
                counter <= counter - baud_limit;
                counter <= counter - baud_limit;
        else
        else
                counter <= counter + baud_freq;
                counter <= counter + baud_freq;
end
end
 
 
// clock divider output 
// clock divider output 
always @ (posedge clock or posedge reset)
always @ (posedge clock or posedge reset)
begin
begin
        if (reset)
        if (reset)
                ce_16 <= 1'b0;
                ce_16 <= 1'b0;
        else if (counter >= baud_limit)
        else if (counter >= baud_limit)
                ce_16 <= 1'b1;
                ce_16 <= 1'b1;
        else
        else
                ce_16 <= 1'b0;
                ce_16 <= 1'b0;
end
end
 
 
endmodule
endmodule
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
//                                              Th.. Th.. Th.. Thats all folks !!!
//                                              Th.. Th.. Th.. Thats all folks !!!
//---------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------
 
 

powered by: WebSVN 2.1.0

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