2020年4月1日 星期三

Shift register for Loop in Verilog

Shift register for Loop in Verilog

源自於 https://www.chipverify.com/verilog/verilog-for-loop

module Lshift_reg (input            clk,        // Clock input
                   input            rstn,       // Active low reset input
                   input [7:0]      load_val,   // Load value
                   input            load_en,    // Load enable
                   output reg [7:0] op);        // Output register value

   integer i;

   // At posedge of clock, if reset is low set output to 0
   // If reset is high, load new value to op if load_en=1
   // If reset is high, and load_en=0 shift register to left
   always @ (posedge clk) begin
      if (!rstn) begin
        op <= 0;
      end else begin

        // If load_en is 1, load the value to op
        // else keep shifting for every clock
        if (load_en) begin
          op <= load_val;
        end else begin
            for (i = 0; i < 7; i = i + 1) begin
              op[i+1] <= op[i];
            end
            op[0] <= op[7];
        end
      end
    end
endmodule


// 時間單位 100ns, 時間精確度100 ps
`timescale 100ns/100ps 
module Test_bench;
/*
module Lshift_reg (input            clk,        // Clock input
                   input            rstn,       // Active low reset input
                   input [7:0]      load_val,   // Load value
                   input            load_en,    // Load enable
                   output reg [7:0] op);        // Output register value
*/
// Inputs
reg clk=1'b0, rstn=1'b1;
reg load_en=1'b0;
reg [7:0]load_val=8'b1010_0101;

// Outputs
wire [7:0] op;

integer i;

// Instantiate the Unit Under Test (UUT)

 Lshift_reg UUT (clk,rstn,load_val,load_en,op);

initial begin
  $monitor (clk,rstn,load_val,load_en,op);
  // Initialize Inputs
  #4  rstn=0;
  #9  rstn=1;
  #10 load_en=1;
  #18 load_en=0;
  end
always #5 clk= ~clk;

initial begin
 for(i =0; i<=10; i=i+1)
begin
#120
load_en=1; load_val=~load_val;
#10
load_en=0;
end
 end

initial
begin
    #1500 // Final time:  1500 ns
    $stop;
end

endmodule



沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...