안녕하세요? 대학교 과제로 Up and Down game을 만들어보려고 코드를 짜봤는데 모델심에서 시뮬레이션을 돌리면 에러가 떠서 이렇게 도움을 받고자..질문드립니다 동작만 가능하게 만들면 되어서 마음껏 수정하셔도 괜찮아요 (뭔가 제가 짠 게 비효율적인 것 같아서요..)아래는 제가 짠 코드들 이구요, 전체적인 동작은 다음과 같습니다. 1. State0에서 module LSFR을 불러와서 난수 rnd를 저장하고 State1로 넘어간다. 2. State1에서는 사용자에게 fpga보드의 스위치를 통해 4비트의 이진수 sw을 입력받고 bcd에 저장한다. 그러고나서 module bcd_seven을 불러와서 fpga보드의 숫자판에 seven을 출력하고 State2로 넘어간다. 3. State3는 rnd와 bcd 값을 비교하는 부분이다. 만약 rnd > bcd인 경우, led 에서 Red 불빛을 키고 다시 State1로 간다. 그렇지 않고 만약 rnd < bcd인 경우, led에서 Blue 불빛을 키고 State1로 간다. 그렇지 않고 rnd = bcd인 경우, led에서 Green 불빛을 키고 다시 State0으로 간다. ㄱ. 사용자로부터 입력받은 4bit 스위치 값을 fpga보드 위에 숫자판에 0~9까지의 숫자로 표시하는 bcd_seven 모듈`timescale 1ns/1nsmodule bcd_seven input [3:0] bcd; output [6:0] seven; reg [6:0] seven; always @(bcd) begin case (bcd) 4'b0000 : seven = 7'b0111111; 4'b0001 : seven = 7'b0000110; 4'b0010 : seven = 7'b1011011; 4'b0011 : seven = 7'b1001111; 4'b0100 : seven = 7'b1100110; 4'b0101 : seven = 7'b1101101; 4'b0110 : seven = 7'b1111101; 4'b0111 : seven = 7'b0000111; 4'b1000 : seven = 7'b1111111; 4'b1001 : seven = 7'b1101111; default : seven = 7'b0000000; endcase endendmodule ㄴ. 0~9까지의 숫자 중 하나를 랜덤으로 뽑아 rnd에 저장하는 LSFR 모듈`timescale 1ns/1nsmodule LFSR (input clk, input rst, output [3:0] rnd);reg [3:0] random, random_next, random_done;reg [2:0] count, count_next;wire feedback = random[3] ^ random[2];always @(posedge clk or posedge rst) beginif (rst) begin random <= 4'hF; count <= 0;endelse if (count == 3) begin count <= 0; // if (random < 10) // Limit the range to 0 to 9 random_done <= random % 10; endelse begin random <= random_next; count <= count_next; endendalways @(*) begin random_next = random; count_next = count; random_next = {random[2:0], feedback}; count_next = count + 1;endassign rnd = random_done;endmodule ㄷ. rnd와 bcd 값을 비교해서 led 불빛을 표시하는 Upanddown 모듈`timescale 1ns/1nsmodule Upanddown ( input clk, input rst, input [3:0] sw, output reg red_led, output reg blue_led, output reg green_led);reg [3:0] rnd;reg [3:0] bcd;reg [1:0] state, next_state;// Instantiate LSFR and bcd_seven modulesLSFR lsfr_inst ( .clk(clk), .rst(rst), .rnd(rnd));bcd_seven bcd_seven_inst ( .bcd(sw), .seven());always @(posedge clk or posedge rst) begin if (rst) begin state <= 2'b00; // Initial state: State0 end else begin state <= next_state; endendalways @(posedge clk) begin case (state) 2'b00: begin // State0: Generate rnd using LSFR lsfr_inst; // Call LSFR module rnd <= lsfr_inst.rnd; // Store the generated rnd next_state = 2'b01; // Move to State1 end 2'b01: begin // State1: Get user input from switch and display on 7-segment display bcd_seven_inst.bcd <= sw; bcd_seven_inst.seven(); // Call bcd_seven module bcd <= bcd_seven_inst.bcd; next_state = 2'b10; // Move to State2 end 2'b10: begin // State2: Compare rnd and user input, update LEDs, and go to the next state if (rnd > bcd) begin red_led = 1; blue_led = 0; green_led = 0; next_state = 2'b01; // Move to State1 end else if (rnd < bcd) begin red_led = 0; blue_led = 1; green_led = 0; next_state = 2'b01; // Move to State1 end else begin red_led = 0; blue_led = 0; green_led = 1; next_state = 2'b00; // Move to State0 end end default: begin next_state = 2'b00; // Default: Move to State0 end endcaseendendmoduleㄹ. rnd>bcd, rnd<bcd, rnd=bcd 등 전체적인 동작을 확인할 수 있는 테스트벤치`timescale 1ns/1nsmodule Upanddown_Tb;reg clk;reg rst;reg [3:0] sw;wire red_led, blue_led, green_led;// Instantiate Upanddown moduleUpanddown upanddown_inst ( .clk(clk), .rst(rst), .sw(sw), .red_led(red_led), .blue_led(blue_led), .green_led(green_led));// Clock generationinitial begin clk = 0; forever #5 clk = ~clk;end// Initial valuesinitial begin rst = 1; sw = 4'b0000; // Apply reset #10 rst = 0; // Scenario 1: rnd > bcd #20 sw = 4'b0010; // User input: 0010 #30 $display("Scenario 1: rnd > bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); // Scenario 2: rnd < bcd #40 sw = 4'b1001; // User input: 1001 #50 $display("Scenario 2: rnd < bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); // Scenario 3: rnd = bcd #60 sw = 4'b1101; // User input: 1101 #70 $display("Scenario 3: rnd = bcd, Expect Red LED: %0d, Blue LED: %0d, Green LED: %0d", red_led, blue_led, green_led); #100 $finish; // End simulation after some timeendendmodule