Next: Beenden von Cadence
Up: Anlegen einer Schaltung
Previous: Standardbibliotheken und der Library
Der bereits angelegte Functional View wird jetzt zum Editieren
geöffnet:
Menu> File -> Open
Menu> Library Name -> <Bibliothek>
Form> Cell Name -> <Zelle>
Menu> View Name -> functional
Button> Mode -> Edit
Button> OK
Der FIFO soll folgendes Verhaltensmodell haben:
// Verilog HDL for "mylib", "fifo256" "functional"
module fifo256( data, ce, we, oflow, empty, clk, reset, bistmode, bistout );
inout [7:0] data; // Bidirektionaler Datenbus
input ce, we; // Chip Enable, Write Enable
input clk, reset; // Takt, asynchrones Ruecksetzen
output oflow, empty; // Ueberlauf, leer
input bistmode; // BIST-Mode
output bistout; // BIST-Ausgang
reg oflow;
reg [7:0] fiforam [0:255]; // Der RAM
reg [7:0] read_adr; // Adresse, von der gelesen wird
reg [7:0] write_adr; // Adresse, auf die geschrieben wird
wire [7:0] delta_adr; // Differenz der Adressen
/**********************************************************************/
/* Modellierung asynchrones Reset */
/**********************************************************************/
always @(reset)
if( reset == 1 ) begin
assign read_adr = 0;
assign write_adr = 0;
assign oflow = 0;
end else begin
deassign read_adr;
deassign write_adr;
deassign oflow;
end
/**********************************************************************/
/* Wenn Chip Enable und Write Enable, schreibe auf Speicher und */
/* erhoehe Schreibadresse. */
/* Wenn Chip Enable und nicht Write Enable, erhoehe Leseadresse */
/**********************************************************************/
always @(posedge clk) begin
if(ce == 1) begin
if(we == 1) begin
fiforam[write_adr] <= data;
write_adr <= write_adr + 1;
end
else begin
read_adr <= read_adr + 1;
end
end
end
/**********************************************************************/
/* Wenn Chip Enable und nicht Write Enable, lege den Inhalt der */
/* Leseadresse auf den Datenbus, ansonsten Ausgang hochohmig */
/**********************************************************************/
assign data = (ce == 1 && we == 0) ? fiforam[read_adr] : 32'bz;
/**********************************************************************/
/* Differenz der Adressen = Speicherinhalt */
/**********************************************************************/
assign delta_adr = write_adr - read_adr;
/**********************************************************************/
/* Wenn 255 Worte im Speicher und schreiben, Ueberlauf-Warnung */
/* einschalten. Wenn 256 Worte im Speicher und lesen, Uberlauf- */
/* Warnung ausschalten */
/**********************************************************************/
always @(posedge clk)
if( ce == 1 ) begin
if( delta_adr == 8'hFF && we == 1 ) oflow <= 1;
if( delta_adr == 0 && we == 0 ) oflow <= 0;
end
/**********************************************************************/
/* Wenn Adressdifferenz 0 und kein Ueberlauf, Leer-Signal */
/**********************************************************************/
assign empty = (delta_adr == 0 & ~oflow);
endmodule
Wenn Sie den Text abgespeichert und den Editor beendet haben, fragt
Cadence Sie, ob automatisch ein Symbol generiert werden soll.
Sie können mit `Yes' antworten.
Sehen Sie sich das Symbol an:
Menu> File -> Open
Menu> Library Name -> <Bibliothek>
Form> Cell Name -> <Zelle>
Menu> View Name -> symbol
Button> Mode -> Read
Button> OK
Das Anzeigefenster mit dem Symbol beenden Sie mit
Windows -> Close
Analog öffnen Sie z.B. einen Schaltplan (Schematic View).
Thilo Thiessenhusen
16. 4. 1999