Verilog는 루프, 루프에 대한 synthesisable있는 동안??

루프는 허용하지만 들어 루프는 도구에 의존하고 그것은 FPGAs 좋은하지 않습니다 반면
 
나는 구조와 행동 진술을 결합 verilog 코드를 작성해야합니다. 그러나 나는 모든 클럭 사이클에서 이러한 구조적 코드를 실행해야합니다. 나는 항상 블록 내부에 해당 Strustural statemnets를 작성할 수있다?? 그렇지 않으면 HW 내가합니까? 빠른 회신 도움이 많이있을 게요 ...
 
나는 easely unrolled 잊을 수있는 모든 루프는 synthesisable 생각합니다. 이렇게 들어, 루프 변수를 대체, 루프를 풀다하는 전처리로 생각하고, 거기 가서 ..
 
[인용 = ankit12345]의 경우 (I = 0, I <10 I + +) 내가이 작품에게 생각 ..... 어디로 ...... (I = 0의 경우, 전
 
두 가지는 처리하는 경우 모든 루프는 합성입니다 .. 1. 유한 루프이 있어야합니다. 루프 내에서 더 지연 명세서 없음
 
어떤 이유로 다음과 Verilog 코드는 Quartus II 10.0에서 제대로 작동하지 않습니다. 제가 가장 중요한 설정 비트의 오른쪽에있는 모든 비트를 설정하는 함수를 작성하려고 오전 :
Code:
 기능을 [31:0] 마스크 (입력 [31:0] 탭), 정수 인덱스, 마스크 = 탭;에 대한 ( 색인 = 1; 색인 <32; 색인 = 인덱스 * 2) 시작 마스크 = 마스크 | (마스크>> 색인), for 루프의 다른 반복이 동시있는 것처럼 최종 endfunction은
코드 합성. 모든 설명은 감사. TM
 
당신이 쓰는 코드는 다음 합성이 이해 동시 보이지만 난 당신이 뭘 원하는지 이해가 안
 
내가 원하는 것은 간단하다. 나는 1의 바로 왼쪽 1 모든 게재 순위에있는 단어를 반환하려는 입력 단어를 감안할 때. 예를 들어, 내가 32b'00000001111111111111111111111111 원하는 아니면 차단 할당을 사용하고 있기 때문에 루프가이해야 제가 32b'00011111111111111111111111111111 원하는 32b'00010100101001010101001010010011 부여 32b'00000001000000000000000000000000을주는 거죠. 각 반복 후에 32b'00000001000000000000000000000000를 시작으로 전 32b'00000000110000000000000000000000 / / 인덱스 == 1 32b'00000000111100000000000000000000 / / 인덱스 == 2 32b'00000000111111110000000000000000 / / 인덱스 == 4 32b'00000000111111111111111100000000 / / 인덱스 == 8 32b'00000000111111111111111111111111을해야합니다 모든 반복은 concurrantly 발생하는 경우처럼 / / 색인 == 16 그러나, 결국 코드는 실제로 32b'00000000110100010000000100000000을 생산하고 있습니다.
 
왜 함수가 아닌 모듈을 사용합니까? 모듈에서 당신은 최초의 문장을 사용할 수 있으며 그것은 일한 것입니다.
 
회신 jducluzeau 주셔서 감사합니다,하지만 함수에서 작동하지 않는 경우, 왜 모듈에서 일하는 거지? 모듈을 사용하는 경우 이외의 상호 문제가 있습니다. 함수를 사용하면, 그것을 사용하는 각 모듈은 자신의 복사본을 가질 수 있습니다.
 
대신 기능 모듈을 사용하는 이유는 사용하지 마십시오. 당신은 다른 모듈에 모듈을 사용할 수 있습니다. 이 코드는 작동합니다. 모듈 masker (마스크, 탭); 출력 [31:0] 마스크, 입력 [31:0] 탭, genvar I, 할당 마스크 [31] = [31] 탭, (I = 1에 대한 생성, I
 
생성을 사용하여 예를 들어 주셔서 감사합니다. 전에 만드는 것을 본 적이 없어. 나는 그것이 잘못되면 다른 지역에서 프로젝트에 문제가있을 수 있기 때문에 즉, 원본 코드의 문제가 알아내야 할 필요는 없어.
 
마스크를 시도 = 마스크 | (탭>> 색인) 나는 문제가이 라인에서 오는 것 같아요. 회로도 뷰어를 열고, 당신은 문제를 볼 수 있습니다.
 
사실은 정반대을 제안하려고 했어요 - 원래 코드 마스크를 사용한 = 마스크 | (탭>> 색인), 대신 마스크 = 마스크 | (마스크>> 색인), 그렇다하더라도, 난 안보이는데 어디에 이것 좀 출력을 얻을. 예를 들어, 내가 이동 1되는 결과를 0, 1, 2, 4, 8 배로 11,101,000,100,000,001의 패턴을 기대할 수. 그것은 결과를 주입 또는 다음 1,2,4,8 배 도청 장치를 이동하는 것 같아요. 당신이 도움이되는지 중간 변수를 만들 수 있습니다.
 
개인적으로, 나는 루프를 위해 그것을하지 않았을거야. 때로는 for 루프 쉽게 읽을 수 있도록 도움지만, 당신은 첫 눈에 명확하지 않습니다. 이것이 100의 라인을 필요로하지 않는 차라리 더 나은 가독성을 위해 케이스 명세서에 걸겠어요.
 
당신은 당신의 코드를 한 시간에 실행하면 어떤 일이있는 하드웨어의 생각을 할 수 있겠어 ... 일정한 시간 동안 실행하고, 다음의 복제가 for 루프 사용 후 합성 수있다면 루프가 synthesisable이다에 대한 .... 일은 우리가 됐죠 시나리오를 시각화 수있다 ... 기억, 아무것도의 동적이 합성되지 않습니다 ..
 
게시된 모든 사람에게 감사합니다. 올바른 구문은 마스크 = 마스크 | (마스크>> 색인), 나는 데브 보드에 LED 및 색인 * 2와 인덱스 1이 실제로 지금 같은 정확한 결과를 얻을 것을 확인 7 세그먼트에이 함수의 결과를 밖으로 쏟아 . 나는 원래 버그 무슨 일이 일어 났는지 모르겠어요. 내가 for 루프 jducluzeau의과 마찬가지로 작성된 함수가 아닌 생성 루프를 사용하기로 결정했습니다. 이것은 작품입니다 이해할 수 있습니다. [코드] 기능을 [31:0] 마스크 (입력 [31:0] 탭), 정수 인덱스, 마스크 [31] = [31] 탭, 대한 (인덱스 = 30; 인덱스> = 0; 지수 = 인덱스 - 1) 마스크를 시작 [인덱스] = 탭 [인덱스] | 마스크 [인덱스 + 1]; 끝 endfunction [/CODE]
 

Welcome to EDABoard.com

Sponsor

Back
Top