묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
왕초보 대학교 과제 Verilog 코드 질문
안녕하세요? 대학교 과제로 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
-
미해결설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
FPGA 실습 파일 다운로드가 안되네요..
수업 자료 txt파일은 정상적으로 다운로드가 되는데 실습파일은 다운로드를 눌러도 아무 반응이 없네요. 혹시 몰라서 OneDrive 재설치도 해보고 모바일 다운로드도 시도해봤지만 똑같았습니다. 제가 전에 다운로드를 한 번 받긴했는데 그때가 8월쯤이었고 새로운 파일들 추가된 것들이 좀 있길래 다시 받으려고 했거든요. 이게 한번만 다운로드 가능하게 막아놓으셨을 것 같진 않은데 이 부분 확인 한 번 부탁드려도 될까요?
-
미해결설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
회로설계 직무 취업 관련 질문입니다.
안녕하세요. 인프런 강의 수강 중인 전자공학과 학생입니다. 삼성전자 LSI사업부 같은 대기업의 회로 설계 직무로 취업하는데 있어 석사 이상의 과정이 필수라고 보시나요? 저는 학부만 하고 취업하려고 생각하고 있었는데 유튜브 찾아보니 회로 설계 쪽은 최소 석사는 하고 들어가야 좀 더 나은 성과를 낼 수 있으니 석사 하고 지원하는 게 좋다는 의견이 많은 것 같아요.(어떻게 보면 당연한거지만요..!) 그래서 학부생으로 취업하게 되면 아무래도 할 수 있는 일이 많이 제한적인지 현업에 계시는 맛비님 의견을 듣고 싶습니다^^