From 332bb643ea4448afa5a9136b9d25425ef52e65e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:59:35 +0300 Subject: [PATCH] feat: :sparkles: 8 bit lfsr --- .../8_bit_random_counter.v | 27 +++++++++++++++ .../8_bit_random_counter_tb.v | 34 +++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 03-8_bit_random_counter/8_bit_random_counter.v create mode 100644 03-8_bit_random_counter/8_bit_random_counter_tb.v diff --git a/03-8_bit_random_counter/8_bit_random_counter.v b/03-8_bit_random_counter/8_bit_random_counter.v new file mode 100644 index 0000000..42b2d04 --- /dev/null +++ b/03-8_bit_random_counter/8_bit_random_counter.v @@ -0,0 +1,27 @@ +`define WIDTH 8 +module linear_feedback_shift_register_updown (clk, reset, enable, up_down, count, overflow); +input clk; +input reset; +input enable; +input up_down; + +output [`WIDTH-1 : 0] count; +output overflow; + +reg [`WIDTH-1 : 0] count; + +assign overflow = (up_down) ? (count == {{`WIDTH-1{1'b0}}, 1'b1}) : + (count == {1'b1, {`WIDTH-1{1'b0}}}) ; + +always @(posedge clk) +if (reset) + count <= {`WIDTH{1'b0}}; +else if (enable) begin + if (up_down) begin + count <= {~(^(count & `WIDTH'b01100011)),count[`WIDTH-1:1]}; + end else begin + count <= {count[`WIDTH-2:0],~(^(count & `WIDTH'b10110001))}; + end +end + +endmodule diff --git a/03-8_bit_random_counter/8_bit_random_counter_tb.v b/03-8_bit_random_counter/8_bit_random_counter_tb.v new file mode 100644 index 0000000..a067c88 --- /dev/null +++ b/03-8_bit_random_counter/8_bit_random_counter_tb.v @@ -0,0 +1,34 @@ +module linear_feedback_shift_register_updown_test_bench(); + reg clk; + reg reset; + reg enable; + reg up_down; + + wire [`WIDTH-1 : 0] count; + wire overflow; + +initial begin + $monitor("Reset %b Enable %b Updown %b Count %b Overflow %b", + reset,enable,up_down,count, overflow); + clk = 0; + reset = 1; + enable = 0; + up_down = 0; + #5 reset = 0; + #1 enable = 1; + #5 up_down = 1; + #30 $finish; +end + +always #1 clk = ~clk; + +linear_feedback_shift_register_updown c1( +.clk ( clk ), +.reset ( reset ), +.enable ( enable ), +.up_down ( up_down ), +.count ( count ), +.overflow ( overflow ) +); + +endmodule