본문 바로가기

verilog23

[SoC] FIFO (Design with Verilog) 오늘은 FIFO (First In First Out)에 대해 알아보고 Verilog로 설계해보려고 합니다. FIFO는 직역하면 '선입선출'로 일상생활에서도 많이 들어보셨을 겁니다. 회로에서는 데이터를 buffer하기 위해 사용하곤 합니다. Circular Buffer FIFO 그림처럼 33, 15, 137, 11, 60, 94를 넣으면 똑같이 33, 15, 137, 11, 60, 94 순으로 데이터를 빼는 구조입니다. FIFO는 address가 따로 없기 때문에 순서대로 넣고 순서대로 데이터를 뺍니다. 자주 사용하는 FIFO는 Circular Buffer FIFO인데 순환하는 구조로 생각하시면 됩니다. Shift register를 이용해서 번지 수를 한칸 씩 이동시켜서 마지막 번지에서 빼는 것도 좋겠지만.. 2023. 2. 11.
[AMBA] APB Protocol 설계 (Design with Verilog) 오늘은 AMBA2.0의 APB Protocol을 Verilog로 설계해보려고 합니다. APB Protocol 이론은 다음 게시글을 참고해주세요. APB: https://metastable.tistory.com/39 APB는 Bus입니다. APB를 기반으로 Master와 Slave를 효율적으로 연결할 수 있습니다. APB Protocol을 확인하려면 Master와 Slave를 만들어서 잘 연결이 되는지 확인하면 되는데요, 처음부터 Master와 Slave까지 설계하는 것은 어렵습니다. 따라서 오늘은 간단한 Slave만 만들고 input signal은 testbench에서 넣어주는 식으로 진행하겠습니다. Slave안에 SFR을 만들어서 거기에 데이터를 읽고 쓰는 작업을 수행해보겠습니다. Verilog Cod.. 2023. 2. 9.
[컴퓨터구조] 16bit CPU 설계 (Design with Verilog) 이전 글에서 CPU의 구조와 작동원리에 대해 알아보았습니다. 이전글: https://metastable.tistory.com/28 이번에는 이론을 바탕으로 CPU를 Verilog로 설계하였는데요, 처음부터 깊게 들어가면 너무 어렵기 때문에 간단한 16 bit CPU를 설계하도록 하겠습니다. 시작 전에 말씀드리자면 2년 전 베릴로그가 익숙하지 않을 때 작성하여서 오류랑 잘못된 코딩스타일이 많을 수 있습니다.. (ex. reset, latch 생기는 코딩 등) 추후 시간이 나면 한 번 정리해서 올리도록 하겠습니다. 참고로 여기서 사용한 메모리는 앞에서 설계한 sram을 instance하여 이용하였습니다. RISC-V Instruction set이나 GitHub에 있는 코드를 한 번 읽어보는 것도 좋을 것 같.. 2023. 1. 12.
[메모리] SRAM에 데이터 쓰고 읽기 (Design with Verilog) 이전 글에서 SRAM을 Full Custom Design 했었습니다. 이제 메모리가 만들어졌다고 가정하고, 데이터를 읽고 쓰는 과정을 진행해보겠습니다. Verilog Code DUT `timescale 1ns / 1ps module sync_sram(addr, din, dout, clk, we); parameter addr_width = 8, word_depth = 256, word_width = 8; input clk, we; input [addr_width-1:0] addr; input [word_width-1:0] din; output reg [word_width-1:0] dout; reg [word_width-1:0] mem [0:word_depth-1]; always @ (posedge clk).. 2023. 1. 8.
[디스플레이] Video Synchronize (Design with Verilog) 오늘은 앞서 배운 Video Synchronize를 VESA timing standard를 참고하여 설계하고자 합니다. Vertical / Horizontal / Active / Front porch / Back porch 등의 단어가 생소하다면 이전 글의 이론 및 VESA timing standard를 읽어보는 것을 추천드려요! 이론: https://metastable.tistory.com/21 VESA timing standard: https://metastable.tistory.com/22 바로 코드부터 보겠습니다. 코드 전체를 보고 싶으신 분은 맨 아래쪽을 참고해주세요. Verilog Code DUT `timescale 1ns / 1ps module vgen( input i_clk, input i.. 2023. 1. 8.
[논리회로] Register (Design with Verilog) 디지털회로에서는 연산을 할 때 Register에 값을 저장하곤 합니다. 오늘은 간단한 레지스터를 게이트로 나타내보고 verilog로 설계하려고 합니다. 4 bit 병렬 register입니다. 가운데에 있는 combinational 회로는 MUX와 유사하게 보아도 됩니다. Load 신호에 따라 D0~3이 R0~3에 저장됩니다. Verilog Code 4bit Register를 Verilog로 설계하였습니다. Register를 memory처럼 사용하였습니다. 추후에 SRAM을 다룰 때 다시 한 번 다룰건데 미리 코드를 봐두시면 좋을 것 같아요. Read와 Write로 memory에 값을 쓰거나 읽었습니다. DUT `timescale 1ns / 1ps module register4b( i_clk, i_rese.. 2023. 1. 7.
[논리회로] Counter (Design with Verilog) 논리회로에서 중요한 회로인 카운터 (Counter) 에 대한 글입니다. RTL로 설계를 할 때, 카운터는 자주 쓰이는 회로입니다. 카운터의 동작만 잘 알아두어도 설계를 할 때 유용하게 쓸 수 있다고 합니다. Synchronous Counter (동기식 카운터) JK FlipFlop으로 이루어진 동기식 카운터입니다. Synchronous Counter는 비동기식보단 복잡하지만 빠르다는 장점이 있습니다. Asynchronous Counter (비동기식 카운터) JK FlipFlop으로 구성된 비동기식 카운터입니다. Synchronous Counter보다 간단하지만 clock에 의해 동작하지 않으므로 느릴 수 있습니다. 비동기식 카운터는 Ripple Counter라고 부르기도 합니다. 앞 F/F의 출력을 뒤 .. 2023. 1. 6.
[논리회로] D Latch와 FlipFlop (Design with Verilog) 이전 글에서 작성했던 것처럼 FlipFlop은 Latch에 edge detector circuit을 붙여서 사용합니다. 이번 F/F 설명부터는 edge detector circuit을 생략하겠습니다. D Latch (FlipFlop) Latch의 경우 CLK가 1이면 Q 2023. 1. 2.