Montag, 14. April 2014

CF-Karte und CPLD Teil II

Nachdem ich nun ein Wochenende in Ruhe drüber nachdenken konnte, wie ich denn dieses Riesen-CPLD vereinfachen kann, ist mir eine Idee gekommen. Den Adressbus brauche ich nicht wirklich durch das CPLD zu routen, da die Adressinformationen die ganze Zeit über an der CF-Karte anliegen können. Unter dieser Bedingung komme ich zu einem etwas einfacherem Verilog-Programm:

module CF_Card_Interface(
clk,
data_z8,
data_cf,
iorq,
wr,
rd,
cfrd,
cfwr,
cfsel,
z8wait,
cpld_selected);

input clk;
inout [7:0] data_z8;
inout [7:0] data_cf;
input iorq;
input wr;
input rd;
output cfrd;
reg cfrd = 1;
output cfwr;
reg cfwr = 1;
output cfsel;
reg cfsel = 1;
output z8wait;
reg z8wait = 1;
reg [5:0] counter;
reg [7:0] data_z8_reg;
reg [7:0] data_cf_reg;
input cpld_selected;

wire cpld_sel = (iorq == 0 && cpld_selected == 1);
wire z8_io_read = (rd == 0 && cpld_sel == 1) ? 1 : 0;
wire z8_io_write = (wr == 0 && cpld_sel == 1) ? 1 : 0;

assign data_z8 = (z8_io_read == 1) ? data_z8_reg : 8'bzzzzzzzz;
assign data_cf = (z8_io_write == 1) ? data_cf_reg : 8'bzzzzzzzz;

always @(negedge clk) begin
if (!z8_io_read && !z8_io_write) begin
counter = 0;
cfrd = 1;
cfwr = 1;
cfsel = 1;
z8wait = 1;
end else begin
case(counter)
0: begin
z8wait = 0;
if (wr == 0) begin
data_cf_reg = data_z8;
end
end
3: if (rd == 0) begin
cfrd = 0;
cfsel = 0;
end else begin
cfsel = 0;
cfwr = 0;
end
 13: if (rd == 0) begin
data_z8_reg = data_cf;
end
 14: begin
cfsel = 1;
cfrd = 1;
cfwr = 1;
end
 15: begin
z8wait = 1;
end
endcase
counter = counter + 1;
end
end
endmodule

Nachdem ich diese Änderungen im Xilinx ISE eingegeben hatte und nach einem passenden CPLD fahnden ließ, lautete die Antwort tatsächlich XC9536, der kleinste aller CPLDs von Xilinx. Bei Reichelt für € 1,80 in einem VQFP-44 Gehäuse (quadratischer SMD) zu bekommen.
Leider hat die ISE bei dem automatischen Fitting die Zuordnung der Pins recht willkürlich vorgenommen, um die Funktionsbausteine gleichmäßig auszunutzen. Da wird nun noch eine Menge Handarbeit erforderlich sein, um die Pins so gut wie möglich zu sortieren, damit noch ein sinnvolles Platinenlayout möglich ist. Aber diese Hürde wäre dann auch schon mal genommen.
Dann wäre der übernächste Schritt in der Tat die Fertigung der Platine. Es geht voran.

Keine Kommentare:

Kommentar veröffentlichen