
- #Double buffered parallel to serial converter serial#
- #Double buffered parallel to serial converter code#
#Double buffered parallel to serial converter serial#
parallel_to_serial.v // Meher Krishna Patel // Date : 26-July-17 // converts parallel data into serial module parallel_to_serial #( parameter N = 8 ) ( input wire clk, reset, input wire data_in, // parallel data output reg empty_tick, // for external control output reg data_out // serial data ) reg data_reg, data_next reg count_reg, count_next reg empty_reg, empty_next // conversion completed and ready for next data in register always posedge clk ) empty_tick = empty_reg // save initial and next value in register always posedge clk, posedge reset ) begin if ( reset ) begin count_reg <= 0 empty_reg <= 1 data_reg <= 0 end else begin count_reg <= count_next empty_reg <= empty_next data_reg <= data_next end end always * begin count_next = count_reg empty_next = empty_reg data_next = data_reg // parallel_to_serial data data_out = data_reg // coversion completed, load the next data if ( count_reg = N - 1 ) begin count_next = 0 // restart count empty_next = 1 data_next = data_in // load next data end else begin // else continue counting count_next = count_reg + 1 empty_next = 0 end end endmodule

Please read Chapter Section 6 for better understanding of the listing. Here, we can see the shifting of LEDR pattern twoards right or left based on SW combination. data) operations are performed using SW and SW respectively. q_reg) are displayed on LEDR whereas ‘shifting-control (i.e. Here, 1 second clock pulse is used to visualize the output patterns. Listing 8.4 can be used to test the Listing 8.3 on the FPGA board. change 'feedback_value' pattern module rand_num_generator #( parameter N = 3 ) ( input wire clk, reset, output wire q ) reg r_reg wire r_next wire feedback_value always posedge clk, posedge reset ) begin if ( reset ) begin // set initial value to 1 r_reg <= 1 // use this or uncomment below two line // r_reg <= 1'b1 // 0th bit = 1 // r_reg <= 0 // other bits are zero end else if ( clk = 1 'b1 ) r_reg <= r_next end //// N = 3 //// Feedback polynomial : x^3 + x^2 + 1 ////total sequences (maximum) : 2^3 - 1 = 7 assign feedback_value = r_reg ^ r_reg ^ r_reg //// N = 4 //assign feedback_value = r_reg ^ r_reg ^ r_reg // N = 5, maximum length = 28 (not 31) //assign feedback_value = r_reg ^ r_reg ^ r_reg //// N = 9 //assign feedback_value = r_reg ^ r_reg ^ r_reg assign r_next = // left shift 3 : s_next = data // load data (for parallel to serial) endcase end assign q_reg = s_reg endmodule rand_num_generator.v // created by : Meher Krishna Patel // date : 22-Dec-16 // Feedback polynomial : x^3 + x^2 + 1 // maximum length : 2^3 - 1 = 7 // if parameter value is changed, // then choose the correct Feedback polynomial i.e.
#Double buffered parallel to serial converter code#
The code implements the design for 3 bit LFSR, which can be modified for LFSR with higher number of bits as shown below,

Random numbers are generated using LFSR in Listing 8.1. Table 8.1 List of feedback polynomials ¶ Number of bits} Some of the polynomials are listed in Table 8.1. LFSR polynomial are written as \(x^3 + x^2 + 1\), which indicates that the feedback is provided through output of ‘ xor’ gate whose inputs are connected to positions 3, 2 and 0 of LFSR. large number of initial values are possible), then the generated numbers can be considered as random numbers for practical purposes. The sequences of random number can be predicted if the initial value is known. These random numbers are generated based on initial values to LFSR. Long LFSR can be used as ‘ pseudo-random number generator’. Script execution in Quartus and ModelsimįPGA designs with Verilog and SystemVerilogĨ.2.1. Queue with first-in first-out functionality
