Q&A Home > 고객지원 > 기술지원 > Q&A
[re]combo II 답변좀 부탁드릴게요...
카테고리FPGA/SoC
작성자HB_SoC 아이피119.203.239.64
작성일10-06-11 12:00 조회수3961
파일
답변이 늦어 죄송합니다.

실제 구성할 때 For 문을 잘 사용하지 않습니다.

카운트 블럭을 설계하여 회로를 구성하시는 것이 좋을 것 같습니다.


예를 들어

process(clk)
  if clk'event and clk = '1' then
    if md = "10" then -- record
      cnt_read <= 0;

      if cnt_write < 99 then
        cnt_write <= cnt_write+ 1;
      end if;
      
      key(cnt_write) <= key;

  elsif md = "01" then -- play

      cnt_write <= 0;

      if cnt_read < 99 then
        cnt_read <= cnt_read + 1;
      end if;

      dout <= key(cnt_read)
  else
         ...............
   end  if;
end process;

process(dout)
begin
    case dout is
      when "1000" => cnt_piezo_limit <= do;
      when "0100" => cnt_piezo_limit <= re;
      when "0010" => cnt_piezo_limit <= mi;
      when "0001" => cnt_piezo_limit <= fa;
      when others => cnt_piezo_limit <= 0;
    end case;
end process;


process(clk)
begin
  if clk'event and clk = '1' then
    if cnt_piezo < cnt_piezo_limit then
      cnt_piezo <= cnt_piezo + 1;
    else
      cnt_piezo <= 0;
    end if;
  end if;
end process;

piezo <= not piezo when cnt_piezo = 1;

.... 


이런 방법으로 설계하면 될 것 같습니다. 

   
FOR 문의 경우..  제가 잘 이해를 못하는 것일수도 있지만..
하드웨어로 어떻게 표현할지가 떠오르지 않아 사용을 하지 않고 있습니다.




>
템플릿 삽입란에서 이것저것 확인을 해보다가,

type mem is array(RANGE) of std_logic(RANGE);

이러한 구문을 찾았습니다.

그래서,

아키텍쳐에서
type rec is array(9999 downto 0) of std_logic_vector(6 downto 0);
signal key : rec;

이러한 식으로 선언을 해주고,

키패드의 키 검색 이후에,
keypad<=keypadcol&keypadrow;
keycode<=keypadcol&keypadrow;
PROCESS(rclk) BEGIN
      if rclk'event and rclk = '1' then
           if modesw="00000011" then //녹음 모드
                for i in 0 to 9999 loop
                     key(i)<=keypad;
                end loop;

           elsif modesw="10000000" then //재생 모드
                for i in 0 to 9999 loop
                     keycode<=key(i);
                         if keycode="1001000" then -- 1 octave //키패드의 row+col을 하나로 합쳤습니다. 녹음을위해서
                              if cnt = do then
                                   cnt <= 0;
                              else
                                   cnt <= cnt+1;
                              end if;
                        elsif keycode="1000100" then
                              if cnt = rep then
                                   cnt <= 0;
                             else
                                   cnt <= cnt+1;
                             end if;
                        (이하는 cnt를 각 음계별로 if문...

이러한 식으로 코드 구성을 했는데, for문이 되는건지 안되는건지 좀 답답한게,
지난번에 조언해주신대로, led를 녹음 모드에서 하나 켜보고

재생모드에서도 다른 led를 켜보되, 특정 버튼 몇개에서는 1번 led를, 다른 버튼에선 2번 led가
켜지게 해놨었습니다.

하지만, 뭔가 문제가 되는지,

녹음모드에서 한참 누르다가
재생모드로 넘어가면 무조건 2번 led (특정 버튼 몇개를 제외한 나머지 상황에서 켜지는 led)만 켜지는데

클럭은 1MHz입니다....

몇일간 고심하다가 내린 결론이었는데,


참 답답할 따름입니다 ㅜㅜ


조언좀 부탁드립니다.... 수고하세요~

다음글 combo II 답변좀 부탁드릴게요...
이전글 sm2 p320 mplayer 포팅 질문입니다.

댓글 등록은 로그인 하신후 이용하실 수 있습니다.