왜 XST 최적화텔 내 레지스터이며 어떻게 내가 그것을 멈추?
문제
저는 간단하 verilog 프로그램으로 증가하는 32 비트 카운터로 숫자를 ASCII 문자열을 사용하여$sformat 고 그런 다음 밀어 문자열을 호스트 컴퓨터 1 바이트를 사용하여 한 번에는 FTDI FT245RL.
불행하게도 Xilinx XST 유지 최적화하는 멀리 문자열을 등록 벡터입니다.나가려고 일 처리의 주위에 다양한 초기화와 액세스 루틴 성공했다.나는 할 수 없을 끄고 최적화 모두의 예를 찾을 온라인과 다를 아주 작은 내 초기화 루틴입니다.무엇이 잘못된 것입니까?
module counter(CK12, TXE_, WR, RD_, LED, USBD);
input CK12;
input TXE_;
output WR;
output RD_;
output [7:0] LED;
inout [7:0] USBD;
reg [31:0] count = 0;
reg [7:0] k;
reg wrf = 0;
reg rd = 1;
reg [7:0] lbyte = 8'b00000000;
reg td = 1;
parameter MEM_SIZE = 88;
parameter STR_SIZE = 11;
reg [MEM_SIZE - 1:0] str;
reg [7:0] strpos = 8'b00000000;
initial
begin
for (k = 0; k < MEM_SIZE; k = k + 1)
begin
str[k] = 0;
end
end
always @(posedge CK12)
begin
if (TXE_ == 0 && wrf == 1)
begin
count = count + 1;
wrf = 0;
end
else if (wrf == 0) // If we've already lowered the strobe, latch the data
begin
if(td)
begin
$sformat(str, "%0000000000d\n", count);
strpos = 0;
td = 0;
end
str = str << 8;
wrf = 1;
strpos = strpos + 1;
if(strpos == STR_SIZE)
td = 1;
end
end
assign RD_ = rd;
assign WR = wrf;
assign USBD = str[87:80];
assign LED = count[31:24];
endmodule
로딩 장치에 대한 응용 프로그램 Rf_Device 파일에서'3s100e.nph'in 환경/opt/Xilinx/10.1/ISE.경고:Xst:1293-FF/래치 str_0 상수의 값은 0 에서 블록 .이 FF/래치 될 것입니다 트리밍 동안 최적화 과정입니다.
경고:Xst:1896-으로 인해 기타 FF/래치 트리밍,FF/래치 str_1 상수의 값은 0 에서 블록 .이 FF/래치 될 것입니다 트리밍 동안 최적화 과정입니다.
경고:Xst:1896-으로 인해 기타 FF/래치 트리밍,FF/래치 str_2 상수의 값은 0 에서 블록 .이 FF/래치 될 것입니다 트리밍 동안 최적화 과정입니다.
해결책
합$sformat 작업이 될 가능성이 synthesisable-무엇을 고려 하드웨어 컴파일러를 생산해야를 구현하는 이 기능을!즉,'str'등록하지 않도록 컴파일러는 생각은 그것을 최적화할 수 있습니다.고려 BCD 카운터,아마 검색 표 변환하 BCD 코드를 ASCII 코드입니다.
AFAIK'초기'블록되지 않은 synthesisable.초기화롭 사용하는 리셋 신호입니다.기억해야'에 대한 반복과 같은 있지만 어떤 트리거 후 재설정합니다.