STUDY/전공2008/06/01 17:07
functional 에서는 상관이 없지만

timing 시뮬레이션을 돌리거나 보드에서 emulation 을 할때는

레지스터의 reset 신호를 줄때 주의해야 한다.

글로벌 reset ( hardware reset) 의 경우는 negedge 를 써서 async 로 reset 을 줘도 무방하지만

특정 state에서 나오는 reset control 신호의 경우는

clock sync 에 맞도록 입력을 해줘야 한다.

async 로 주게 되면 특정 경우에 reset 이 되버리는 결과를 초래한다.

Ex) Sync reset

always @(posedge clk or negedge rst_n) begin
  if(!rst_n) a <= 0;
  else if (init_reg) a <= 0;
  else if (reg_we ) a <= b;
end


Ex) Async reset

assign tmp_rst_n = ~init_reg & rst_n;
always @(posedge clk or negedge tmp_rst_n) begin
  if(!rst_n) a <= 0;
  else if (reg_we ) a <= b;
end

위 2가지경우는 확실히 다르게 동작하는것을 알 수 있다.

별생각없이 아래방식으로 코딩을 했는데..결국 문제가 발생해서 열심히 노가다로 위 방식으로 바꿨다 -_-;
Posted by 영고니짱
STUDY/전공2007/11/06 00:01
자꾸 까먹는다. 까먹지말자!

module bidirec (oe, clk, inp, outp, bidir);
	// Port Declaration
	input   oe;
	input   clk;
	input   [7:0] inp;
	output  [7:0] outp;
	inout   [7:0] bidir;


reg [7:0] a; reg [7:0] b; assign bidir = oe ? a : 8'bZ ; assign outp = b; // Always Construct always @ (posedge clk) begin b <= bidir; a <= inp; end endmodule



output 은 enable 이 있을경우만 트리거 해주고, 평소에는 input 으로 사용한다.
Posted by 영고니짱
STUDY/전공2007/07/06 00:20
경고 : 아래의 지식은 논리적인 근거도 없고 100% 사실이라고 장담할 수 없으니 맹신에 대한 책임은 저에게 없습니다. 아래의 잡지식은 직간접적인 경험을 통해서 얻은 지식이므로 논리적인 근거를 찾지 못한것이 많습니다.

1. pin 이 stuck at GND 로 가는 경고가 발생하면 해당 pin 들은 값이 변하지 않는 bit 가 있다는 것이다.
   FPGA 에서 동작할때 노이즈가 타면 그 값이 변할 수 있으므로 가급적이면 설계를 할때에는 valid bit 만으
  로 크기를 제한 해서 위의 경고도 없애고 잘못된 값으로인한 오류도 막자.

2. undifned clock 이라는 경고가 발생하면 clock 전용의 pad 를 사용하지 않은것으로 이것은 FPGA 칩이 clock 전용의 pad를 제공하지 않는것이다. FPGA 를 조은걸 쓰면 된다?

3. output pin 의 capacitance 가 0pF 이다.
  출력 pad 에 capacitor 가 없어서 안정적인 전압을 사용할 수 없다. 이럴경우 노이즈가 탈수 있고 그때에는 값이 제대로 안나올수도 있다. 해결책은 좋은 FPGA 를 사용하면 된다.?

4. FPGA 도 extension 도 결국은 물리적으로 전기신호를 통해서 값이 전달 된다. 따라서 노이즈에 약하다. 특히 이종간의 보드를 연결한 경우 ( ARM + FPGA ) 확장핀을 통해서 반드시 logic analyzer 등을 이용해서 그 값이 제대로 전달되고 있는지를 확인해야 한다. 설계를 정확하게 해도 이런 부분에서 오류가 발생하면 찾기가 쉽지 않다.


오늘 하루종일 이문제로 삽질을 하니까 답답하다... 간접적인 경험을 통해서 해결했지만... 스스로 이런 문제들을 찾아서 해결하려면 얼마나 고수가 되어야 하는거지?

숙련된 엔지니어가 되어야 겠다.....


위 문제들에 대한 제 답이 틀릴 수 있습니다. 정확한 답변을 달아 주시는 분께는 정말 감사하게 생각 하겠습니다.

'STUDY > 전공' 카테고리의 다른 글

inout port 사용법  (1) 2007/11/06
802.11 Wireless LAN  (0) 2007/07/18
FPGA 기반의 하드웨어 시스템 개발에 관련된 잡지식?  (0) 2007/07/06
잠시 외도  (2) 2007/06/27
하드웨어와 소프트웨어 파티셔닝  (1) 2007/04/19
ffmpeg 을 Bluesky2440에 porting 하기  (4) 2007/03/23
Posted by 영고니짱
STUDY/전공2007/02/01 01:29

Coding for Readability

  1. 모든 input, output, net, register value 는 소문자를 사용한다.
  2. 모든 상수와 사용자 정의 형식은 대문자를 사용한다.
  3. Module 과 port 는 다음 규칙을 따른다.
    1. 대소문자로 구분된 이름을 사용하지 않는다. - 필수 -
    2. top module 은 영문자와 숫자로만 구성하고 '_' 를 쓰지 않는다.
    3. port 이름은 영문자, 숫자, '_' 를 사용하되, '_'는 연속적으로 쓰거나 맨앞 또는 맨뒤에 쓰지 않는다. - 필수 -
    4. 최상위 module 의 이름과 port 이름은 12자를 초과하지 않는다.
  4. 입출력 port와 net, register variable 은 다음의 규약을 따른다.
    1. _r : register 출력
    2. _a : 비동기 signal
    3. _pn : n번째 phase로 사용되는 signal
    4. _nxt : 같은 register 로 사용되기 전의 data
    5. _z : tri-state 내부 출력 signal
    6. _n : active-low signal
  5. 라인당 글자수가 72자를 넘지 않도록 한다.
  6. Clock 이름은 "clk"을 사용하거나 "clk"을  접두어로 사용한다. Reset signal 은 "rst"를 쓰거나 "rst"를 접두어로 사용한다.
  7. 같은 source 에서 나온 clock_signal 은 같은 이름을 사용해야 한다. - 필수 -
  8. Verilog-HDL이나 VHDL의 예약어를 변수나 상수이름에 사용하지 않는다. - 필수 -
  9. Port 선언 순서는 다음을 따른다.
    1. INPUTS
      1. Clocks
      2. Resets
      3. Enables
      4. Other control signals
      5. Data and address lines
    2. OUTPUTS
      1. Clocks
      2. Resets
      3. Enables
      4. Other control signals
      5. Data
  10. 입력과 출력 port 사이에는 blank line 을 둔다.
  11. 같은 코드를 반복하여 사용하는 경우, 가능하면 function을 사용하고 그 기능에 대해 설명한다.
  12. Loop 와 array 를 가급적 사용하되, 가능하면 loop보다는 array 를 사용한다.
  13. Instance에는 U#_<name>의 이름을 준다.
  14. 합성 후, post-simulation 실행 시 충돌을 방지하기 위해, ASIC library에 존재하는 instance cell 이름과 같은 이름은 사용하지 않는다. - 필수 -
  15. 각 문장은 분리된 라인을 사용한다.
  16. 계속 되는 code line 과 loop에는 들여쓰기를 사용한다.
  17. 모든 always 구문, function, task 에는 comment 를 첨부한다.
  18. 입출력 port, variable은 line당 한개씩 선언하며, 필요시에는 같은 line 에 comment를 첨부한다.
  19. 2개 이상의 연산의 경우, 가독성을 위해 괄호를 사용한다.
  20. 다중 비트 variable 이나 입출력 port일 경우 bit 표현 순서는 [y:x] 나 [x:y] (y>x) 중 하나의 표현법만을 사용한다. 가급적 [y:x]를 사용한다.
  21. Source file 이름과 module 이름을 일치시킨다.
  22. Module Instantiation 의 경우 위치에 의한 것보다도 이름에 의한 것으로 한다.- 필수 -
  23. Non-priority logic을 구현하는 경우 if 보다는 case 를 사용한다.

'STUDY > 전공' 카테고리의 다른 글

하드웨어와 소프트웨어 파티셔닝  (1) 2007/04/19
ffmpeg 을 Bluesky2440에 porting 하기  (4) 2007/03/23
Verilog Coding Style Guide -1  (0) 2007/02/01
[H.264] Integer Transform  (0) 2006/12/11
[H.264] Intra Prediction  (0) 2006/12/07
[H.264] Encoder Block Diargram  (0) 2006/12/05
Posted by 영고니짱