inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

왕초보 대학교 과제 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/1ns module 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 end endmodule ㄴ. 0~9까지의 숫자 중 하나를 랜덤으로 뽑아 rnd에 저장하는 LSFR 모듈 `timescale 1ns/1ns module 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) begin if (rst) begin random <= 4'hF; count <= 0; end else if (count == 3) begin count <= 0; // if (random < 10) // Limit the range to 0 to 9 random_done <= random % 10; end else begin random <= random_next; count <= count_next; end end always @(*) begin random_next = random; count_next = count; random_next = {random[2:0], feedback}; count_next = count + 1; end assign rnd = random_done; endmodule ㄷ. rnd와 bcd 값을 비교해서 led 불빛을 표시하는 Upanddown 모듈 `timescale 1ns/1ns module 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 modules LSFR 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; end end always @(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 endcase end endmodule ㄹ. rnd>bcd, rnd<bcd, rnd=bcd 등 전체적인 동작을 확인할 수 있는 테스트벤치 `timescale 1ns/1ns module Upanddown_Tb; reg clk; reg rst; reg [3:0] sw; wire red_led, blue_led, green_led; // Instantiate Upanddown module Upanddown upanddown_inst ( .clk(clk), .rst(rst), .sw(sw), .red_led(red_led), .blue_led(blue_led), .green_led(green_led) ); // Clock generation initial begin clk = 0; forever #5 clk = ~clk; end // Initial values initial 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 time end endmodule

  • 베릴로그
  • 모델심
  • verilog
  • hdl
  • 디지털시스템설계
  • modelsim
  • vivado
  • 코딩
댓글 1 좋아요 0 조회수 806

FPGA 실습 파일 다운로드가 안되네요..

미해결

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

수업 자료 txt파일은 정상적으로 다운로드가 되는데 실습파일은 다운로드를 눌러도 아무 반응이 없네요. 혹시 몰라서 OneDrive 재설치도 해보고 모바일 다운로드도 시도해봤지만 똑같았습니다. 제가 전에 다운로드를 한 번 받긴했는데 그때가 8월쯤이었고 새로운 파일들 추가된 것들이 좀 있길래 다시 받으려고 했거든요. 이게 한번만 다운로드 가능하게 막아놓으셨을 것 같진 않은데 이 부분 확인 한 번 부탁드려도 될까요?

  • 설계독학
  • 임베디드
  • fpga
  • 베릴로그
  • 전자공학
  • 임베디드
  • 실습파일다운로드
김준표 댓글 2 좋아요 1 조회수 486

회로설계 직무 취업 관련 질문입니다.

미해결

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

안녕하세요. 인프런 강의 수강 중인 전자공학과 학생입니다. 삼성전자 LSI사업부 같은 대기업의 회로 설계 직무로 취업하는데 있어 석사 이상의 과정이 필수라고 보시나요? 저는 학부만 하고 취업하려고 생각하고 있었는데 유튜브 찾아보니 회로 설계 쪽은 최소 석사는 하고 들어가야 좀 더 나은 성과를 낼 수 있으니 석사 하고 지원하는 게 좋다는 의견이 많은 것 같아요.(어떻게 보면 당연한거지만요..!) 그래서 학부생으로 취업하게 되면 아무래도 할 수 있는 일이 많이 제한적인지 현업에 계시는 맛비님 의견을 듣고 싶습니다^^

  • 회로설계
  • 베릴로그
  • fpga
  • 임베디드
  • 취업
  • verilog-hdl
  • 석사
김준표 댓글 1 좋아요 1 조회수 4137

인기 태그

인프런 TOP Writers

주간 인기글