나는 32 비트 카운터를 증가시키고 $ sformat을 사용하여 숫자를 ASCII 문자열로 변환 한 다음 FTDI FT245RL을 사용하여 문자열을 호스트 컴퓨터에 1 바이트 씩 푸시하는 간단한 Verilog 프로그램을 가지고있다.XST가 내 레지스터를 최적화하지 못하는 이유는 무엇입니까? 어떻게 중지합니까?
불행히도 Xilinx XST는 문자열 레지스터 벡터를 최적화합니다. 나는 성공적이지 못한 다양한 초기화 및 액세스 루틴을 시도해 보았다. 최적화를 해제 할 수없는 것처럼 보였습니다. 온라인에서 찾은 모든 예제는 초기화 루틴과 거의 다릅니다. 내가 도대체 뭘 잘못하고있는 겁니까? 환경 /opt/Xilinx/10.1/ISE에서 파일 '3s100e.nph'에서 응용 프로그램 Rf_Device에 대한
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
로드 장치. 경고 : Xst : 1293 - FF/래치 str_0 블록의 상수 값은 입니다. 이 FF/래치는 프로세스 동안 최적화 된 입니다.
WARNING : XST : 1,896 - 인해 다른 으로 FF/래치 트리밍 FF/래치 str_1 블록 0의 정수 값을 갖는다. 이 FF/래치는 프로세스 동안 최적화 된 입니다.
WARNING : XST : 1,896 - 인해 다른 으로 FF/래치 트리밍 FF/래치 str_2 블록 0의 정수 값을 갖는다. 이 FF/래치는 프로세스 동안 최적화 된 입니다.
좋아! 나는 처음에 당신이 말한 것의 절반을 이해하지 못했지만, BCD가 무엇인지를 찾는 데 지난 몇 분을 보냈습니다. 그리고 그것은 제가 원하는 것과 똑같이 보입니다. 이제 조회 테이블을 수행하는 방법을 알아야합니다. 나는 $ sformat을 의심했지만 컴파일러는 불평하지 않고 시뮬레이션에서 완벽하게 작동했다. 그러나 나는 지금 알고 있다고 생각한다. 감사! – MrEvil
조회 테이블은 쉽습니다 - 그들은'case' 문장입니다! 시뮬레이션에서, 당신은 무엇이든 할 수 있습니다 - 그것은 코드를 프로그램으로 다룰 것입니다. 합성을 원한다면 프로그래밍과 같이 하드웨어를 기술한다는 것을 명심해야합니다. – Marty