| ??? 10/01/07 08:18 Read: times |
#145166 - Offensive code here Responding to: ???'s previous message |
Andy said:
Post the code. Here you go. I already posted the file uat.v here. I'd guess that it's whining about 'byteClock' for some reason, since that's the output of divider2. But I'm clueless why. -- Russ PS: It looks like your other note with the hints about parameters vs. `defines shows how to avoid the obscene duplication of the clock divider module that I've got in the file below. Thanks for that.
/* ////////////////////////////////////////////////////////////////////////////
uat_s.v
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION: This module exercises the UAT (UART without the R) module on
the real hardware.
REVISIONS: 29 Sep 07 - RAC - Skeleton that's just enough to get it to
synthesize.
29 Sep 07 - RAC - Added more stuff so it actually works on the
eval board.
//////////////////////////////////////////////////////////////////////////// */
`timescale 1ns / 1ps
`include "../modules/mcd.h"
`include "../modules/uat.v"
/* ////////////////////////////////////////////////////////////////////////////
uat_s()
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION: The highest level module.
REVISIONS: 29 Sep 07 - RAC - Genesis
//////////////////////////////////////////////////////////////////////////// */
module uat_s (clock50mhz, rs232out, baudClock, byteClock);
input clock50mhz; // Eval board's 50 MHz clock
output rs232out; // TxD to a PC or something
output baudClock; // 9600 Hz clock
output byteClock; // 20 Hz clock
reg [7:0] data;
MakeBaudClock divider1 (clock50mhz, baudClock);
MakeByteClock divider2 (baudClock, byteClock);
UAT uart (baudClock, data, byteClock, rs232out);
always @(posedge byteClock) begin
if (data == 122) begin
data <= 97;
end
else begin
data <= data + 1;
end
end
endmodule
/* ////////////////////////////////////////////////////////////////////////////
MakeBaudClock()
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION: THis module divides the eval board's on-board 50 MHz clock down
to 9600 Hz for use as a baud clock.
REVISIONS: 29 Sep 07 - RAC - Adapted from previous work
//////////////////////////////////////////////////////////////////////////// */
`define MAX_COUNT 5208 // Divide by this number
`define UP_TIME 2604 // Set output duty cycle to 50%
`define COUNTER_WIDTH 13 // Enough bits to hold a value
// of MAX_COUNT, but no more
// than necessary
module MakeBaudClock(in, out);
input in;
output out;
reg [`COUNTER_WIDTH-1 : 0] counter; // Count input pulses here
reg out; // Manage output signal here
always @(posedge in) begin // On every input pulse
if (counter == `MAX_COUNT - 1) begin // Time to reset the counter
counter <= 0; // Do so
end // End 'time to reset counter'
else begin // Not time to reset counter
counter <= counter + 1; // Increment it instead
end // End 'not time to reset'
out <= counter < `UP_TIME; // Output is high from counter
end // End 'on every input pulse'
endmodule
`undef MAX_COUNT
`undef UP_TIME
`undef COUNTER_WIDTH
/* ////////////////////////////////////////////////////////////////////////////
MakeByteClock()
///////////////////////////////////////////////////////////////////////////////
DESCRIPTION: THis module divides the 9600 Hz baud clock down to 20 Hz for
use as a character output clock.
REVISIONS: 29 Sep 07 - RAC - Adapted from MakeBaudClock()
//////////////////////////////////////////////////////////////////////////// */
`define MAX_COUNT 480 // Divide by this number
`define UP_TIME 2 // Make it a narrow pulse
`define COUNTER_WIDTH 9 // Enough bits to hold a value
// of MAX_COUNT, but no more
// than necessary
module MakeByteClock(in, out);
input in;
output out;
reg [`COUNTER_WIDTH-1 : 0] counter; // Count input pulses here
reg out; // Manage output signal here
always @(posedge in) begin // On every input pulse
if (counter == `MAX_COUNT - 1) begin // Time to reset the counter
counter <= 0; // Do so
end // End 'time to reset counter'
else begin // Not time to reset counter
counter <= counter + 1; // Increment it instead
end // End 'not time to reset'
out <= counter < `UP_TIME; // Output is high from counter
end // End 'on every input pulse'
endmodule
`undef MAX_COUNT
`undef UP_TIME
`undef COUNTER_WIDTH
|



