📄 altera_up_rs232_counters.v
字号:
/***************************************************************************** * * * Module: Altera_UP_RS232_Counters * * Description: * * This module reads and writes data to the RS232 connectpr on Altera's * * DE1 and DE2 Development and Education Boards. * * * *****************************************************************************/module Altera_UP_RS232_Counters ( // Inputs clk, reset, reset_counters, // Bidirectionals // Outputs baud_clock_rising_edge, baud_clock_falling_edge, all_bits_transmitted);/***************************************************************************** * Parameter Declarations * *****************************************************************************/parameter BAUD_COUNTER_WIDTH = 9;parameter BAUD_TICK_INCREMENT = 9'd1;parameter BAUD_TICK_COUNT = 9'd433;parameter HALF_BAUD_TICK_COUNT = 9'd216;parameter TOTAL_DATA_WIDTH = 11;/***************************************************************************** * Port Declarations * *****************************************************************************/// Inputsinput clk;input reset;input reset_counters;// Bidirectionals// Outputsoutput reg baud_clock_rising_edge;output reg baud_clock_falling_edge;output reg all_bits_transmitted;/***************************************************************************** * Internal wires and registers Declarations * *****************************************************************************/// Internal Wires// Internal Registersreg [(BAUD_COUNTER_WIDTH - 1):0] baud_counter;reg [3:0] bit_counter;// State Machine Registers/***************************************************************************** * Finite State Machine(s) * *****************************************************************************//***************************************************************************** * Sequential logic * *****************************************************************************/always @(posedge clk)begin if (reset == 1'b1) baud_counter <= {BAUD_COUNTER_WIDTH{1'b0}}; else if (reset_counters) baud_counter <= {BAUD_COUNTER_WIDTH{1'b0}}; else if (baud_counter == BAUD_TICK_COUNT) baud_counter <= {BAUD_COUNTER_WIDTH{1'b0}}; else baud_counter <= baud_counter + BAUD_TICK_INCREMENT;endalways @(posedge clk)begin if (reset == 1'b1) baud_clock_rising_edge <= 1'b0; else if (baud_counter == BAUD_TICK_COUNT) baud_clock_rising_edge <= 1'b1; else baud_clock_rising_edge <= 1'b0;endalways @(posedge clk)begin if (reset == 1'b1) baud_clock_falling_edge <= 1'b0; else if (baud_counter == HALF_BAUD_TICK_COUNT) baud_clock_falling_edge <= 1'b1; else baud_clock_falling_edge <= 1'b0;endalways @(posedge clk)begin if (reset == 1'b1) bit_counter <= 4'h0; else if (reset_counters) bit_counter <= 4'h0; else if (bit_counter == TOTAL_DATA_WIDTH) bit_counter <= 4'h0; else if (baud_counter == BAUD_TICK_COUNT) bit_counter <= bit_counter + 4'h1;endalways @(posedge clk)begin if (reset == 1'b1) all_bits_transmitted <= 1'b0; else if (bit_counter == TOTAL_DATA_WIDTH) all_bits_transmitted <= 1'b1; else all_bits_transmitted <= 1'b0;end/***************************************************************************** * Combinational logic * *****************************************************************************//***************************************************************************** * Internal Modules * *****************************************************************************/endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -