- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
module Memorygame
#(parameter BITS = 5)
(clk, rst_n, out);
input clk;
input rst_n;
output reg [3:0] out;
reg [3:0] out_next;
integer count=0;
reg clk_1hz;
always @ (posedge clk) begin // slows our clock from 50mhz to 1hz
if (count<25000000)
count = count +1;
else begin
clk_1hz = ~clk_1hz;
count = 0;
end
end
always @* begin // responsible for determing the blinking of the leds
out_next = out;
repeat(BITS) begin
out_next = {out_next[2:0],(out_next[3]^out_next[0])};
end
end
always @(posedge clk_1hz or negedge rst_n) begin
if(!rst_n)
out <= 4'h1f;
else
out <= out_next;
end
endmodule
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There are a couple of issues.. check out this code and try if it works.. this is the correct way to implement a LFSR.
`timescale 1ns/1ns
module Memorygame
(
input wire clk,
input wire rst_n,
output reg [3:0] out
);
integer count;
reg clk_1hz;
wire lf; // linear feedback of XORed bits.
always @ (posedge clk or negedge rst_n) begin // slows our clock from 50mhz to 1hz
if(!rst_n) begin
count = 0;
clk_1hz <= 1'b0;
end
else begin
if (count<250000)
count <= count + 1;
else begin
clk_1hz <= ~clk_1hz;
count <= 0;
end
end
end //always
assign lf = !(out[3] ^ out[0]);
always @(posedge clk_1hz or negedge rst_n) begin
if(!rst_n)
out <= 4'b0000;
else begin
out <= {out[2],out[1],
out[0], lf};
end
end //always

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page