자일링스 FPGA를위한 부스의 알고리즘 (유한 상태 기계 구현)을 구현하려고합니다. 기본적으로, 시작 신호에서 보조 레지스터를 초기화 한 다음 상태 0으로 이동합니다. 여기에서 2 비트를 비교하고 이동을 시작합니다. 상태 4에 도달 할 때까지이 작업을 반복합니다.부스의 알고리즘 Verilog 합성 가능
assign Result = P[8:1];
[email protected](posedge clk or negedge start)
if(start == 1)
begin
// initialize with start values
state <= 3'd0;
end
else
if(state == 3'd0 || state == 3'd1 || state == 3'd2 || state == 3'd3)
begin
// compare bits and shift data
end
endmodule
테스트 모듈
clk = 0;
a = 4'b0011;
b = 4'b0011;
b = ~b+1;
start = 1;
#10;
start = 0;
CLK가된다 ~ # 5 시간 단위 후의 CLK.
나는 FPGA를 소유하고 있지 않기 때문에 프로그램을 테스트 할 수 없다. (나는 나중에 클래스에서 테스트해야 할 것이다.)
나는 이카로스로 테스트 중이다. 문제는 보조 레지스터가 시계의 첫 번째 순위보다 먼저 초기화되지 않는다는 것입니다.
보조 변수를 제대로 초기화하고 코드를 합성 가능하게 유지하려면 어떻게해야합니까? for 루프와 초기 시작을 사용하여 시도했지만 시뮬레이션은 정상적으로 작동하지만 FPGA에서 작동하지 않습니다 (#delays를 사용해야하기 때문에).
쉬운 방법 (또는 '0'에 대한 'rst_n') =='1 '추가 reset' 신호와 리셋 할 때'REGS를 초기화하는 것이다. – Qiu
초기화되지 않은 "보조 규정"이란 무엇입니까? '국가'? – Morgan
해결했습니다! 초기화되지 않은 "보조 규정"은 중급 결과 (예 : 'a'가있는 '0000') 또는 숫자 a의 2의 보수입니다. –