일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- vivado
- verilog
- uart 통신
- soc 설계
- java
- D Flip Flop
- atmega 128a
- i2c 통신
- behavioral modeling
- LED
- stop watch
- BASYS3
- Recursion
- test bench
- KEYPAD
- DHT11
- ATMEGA128A
- structural modeling
- gpio
- pwm
- hc-sr04
- dataflow modeling
- Linked List
- Algorithm
- ring counter
- FND
- Edge Detector
- Pspice
- half adder
- prescaling
- Today
- Total
목록RTL Design (108)
거북이처럼 천천히
1. 10sec 주기로 FND Left Shifting 하기이번에는 10sec 주기마다 왼쪽으로 Shifting하는 코드를 구현하도록 하겠다.다음과 같이 동작한다.- 12번째부터 15번째 Switch를 통해 16진값을 표현한다.- 가장 오른쪽 FND를 첫 번째 FND라고 하였을 때, 10sec를 주기로 왼쪽으로 Shifting한다.- 4번째 FND에 도달하게 되면 다시 첫 번째 FND으로 돌아와 무한 반복한다. 1.1. 주기가 10sec이기 위해서는 Counter는 얼마의 크기를 가져야 하는가?Basys3의 기본 클럭 주기는 10ns이다. 따라서 10sec 주기를 갖기 위해서는 10nsec을 1000000000 분주를 해야한다.따라서 Counter는 1000000000분주를 하기 위해서는 100000..
1. 4bit 데이터 변수에 담겨 있는 16진수 값을 FND에 출력하기4bit 크기를 갖는 변수에 16진수 값을 저장한 뒤, 이를 FND로 출력하도록 설계한다.동작은 다음과 같이 동작한다.- Common anode는 Switch 0번 ~ 3번를 통해 Control 한다.- Hex value는 Switch 12번 ~ 15번을 통해 표현 하게 된다.- 12번 ~ 15번까지의 Switch로 표현된 16진 값을 4개의 FND에 동시 출력되도록 한다. 1.1. Hex value를 모듈의 입력 값으로 전달하게 되면 이를 출력하기 위한 8개의 다이오드의 출력 정보를 출력한다.Hex value를 모듈의 입력 값으로 전달해야 하기 때문에 입력값은 4bit 크기를 갖는다.8개의 다이오드의 출력 정보를 출력하기 위해서는..
1. Basys3의 FND 다 켜보기Basys3의 FND를 다 켜보도록 하겠다.특별한 데이터를 FND를 통해 출력하지 않는다. 1.1. Basys3의 FND는 어떤 구조를 갖는가?Basys3의 FND의 회로도는 다음과 같은 구조를 갖는다.Basys3는 Common anode 구조로 설계되어 있다.7-Segment를 구성하는 Diode들의 cathode들은 GND로 연결되어 있는 상태이다.따라서 Diode들의 anode에 Vcc 값을 주게 되면 전위차에 의해 전류가 anode에서 cathode로 흐르게 되며, 이로인해 다이오드에 불이 들어오게 된다. 1.2. BJT는 어떻게 동작하는가?BJT의 전류의 방향을 나타내는 화살표가 emitter에서 Base로 향하고 있기 때문에 PNP형 BJT이다.따라서 Bas..
1. Counter의 비트 수 (크기)와 분주비의 상관 관계Counter의 크기는 N bit 를 갖는다면 Counter는 0 ~ 2^N-1 까지 Counting이 가능하다.ex) Counter가 21bit 크기를 갖는다면 0 ~ 2^21 -1까지 Counting이 가능하다.따라서 Basys3의 기본 클럭 펄스의 주기는 10ns를 갖기 때문에 10bit Counter으로 분주화하게 되면 10ns * 1024 = 10240ns = 10us 을 주기를 갖는 새로운 펄스파를 생성시킬 수 있다.=> Basys3의 기본 Clock Pulse의 주기는 10ns를 갖는다.=> 10bit Counter로 1024분주하면 10us 주기를 갖는 펄스파형을 생성시킬 수 있다,=> 21bit Counter로 2^21분주하면 1..
1. Prescalerbasys3의 기본 Clock Pulse의 주기는 10ns를 갖는다.짧은 주기를 갖는 Clock pulse를 가지고 이보다 긴 펄스파형을 생성하거나 낮은 주파수를 갖는 파형을 생성하고 싶을 때, Prescaler 기법을 사용할 수 있다.Prescaler의 주요 기능에 대해서 요약하면 다음과 같다.▶ 고주파 클럭 신호를 낮은 주파수를 갖는 신호로 변환하고자 하는 경우▶ 짧은 주기를 갖는 클럭 신호를 상대적으로 더 긴 주기를 갖는 신호로 변환하고자 하는 경우▶ 입력 클럭 주파수를 일정한 비율로 나누고자 하는 경우 Q) Prescaler 기법은 어떻게 기본 Clock Pulse를 주기가 더 긴 파형으로 변환할 수 있는가?A) 여러 개의 펄스 파형을 하나의 묶음으로 묶은 뒤, 이를 하나의 ..
1. SRAM 8bit PIPO Register를 1024개 엮어서 8192bit = 8kbit 크기를 갖는 레지스터를 생성해보자.8bit PIPO Register 자료형을 갖는 배열을 생성하고, 배열의 사이즈를 1024개 갖도록 한다.1024개의 레지스터 중에서 하나의 레지스터를 선택하기 위해서 10bit 크기를 갖는 Selector가 필요하다.10bit Selector를 통해 해당 레지스터에 접근하여 Read / Write 작업을 수행 할 수 있다. module SRAM_implemented_with_D_Flip_Flop( input clk, enable, reset_p, input read_enable_p, write_enable_p, input [9:0] memory_address..
1. PIPO Shift Register (Parallel Input Parallel Output)병렬 형태로 데이터를 입력 받아 저장하고, 레지스터에 저장된 데이터를 병렬 형태로 출력받는 구조를 갖는 레지스터따라서 아래와 같이 게이트 레벨에서 회로를 구성할 수 있지만, 심각한 문제점을 갖는다. 문제점으로 지적되는 부분은 "WR 단자 값이 0일 경우, AND Gate으로 인해 Register를 구성하는 D Flip Flop의 입력값, D로 0이 들어가게 되고, 그 결과 Register에 저장되어 있던 데이터가 사라진다." 이다.따라서 문제점을 해결하기 위해서 " WR 단자 값이 1일 때는 외부로부터 데이터를 입력 받아 레지스터에 저장하고, WR 단자 값이 0일 때는 외부로부터 데이터를 입력 받지 않고,..
1. PISO Shift Register (Parallel Input Series Output)병렬 형태로 입력 값을 입력 받아 레지스터에 저장한 뒤, 레지스터의 저장된 데이터를 Shift시켜 직렬형태로 하나씩 출력시키는 구조를 갖는 레지스터PISO Shift Register는 아래와 같은 회로 구조를 갖는다. Q) 입력 단자 부분에 왜 MUX가 있으며, MUX는 어떤 역활을 수행하는가?A) PISO Shfit Register가 Read로 동작할 때와 Write로 동작할 때의 경우의 수로 나누어 생각해야한다.Write 로 동작할 경우)- 4bit 데이터를 한 번에 Parallel 형태로 입력받아야 한다.Read 로 동작할 경우)- 출력선 하나이기 때문에 D Flip Flop A부터 D Flip Flop..