J'ai donc suivi un guide fourni par EmbeddedMicro sur la production d'une simple CPU 16 bits en utilisant leur HDL Lucid. Mon but est de convertir ceci à Verilog dans Quartus II. Le problème que j'ai est d'essayer de stocker les bits alloués pour la destination de mes données dans une plage spécifique de bits dans le registre désigné. Le deuxième problème que j'ai est d'utiliser une constante globale comme une des valeurs de cas. J'ai été capable de contourner cela en remplaçant simplement par la valeur constante. J'ai déjà ajouté le fichier include dans les paramètres du projet. Je suis encore nouveau à Verilog, donc leur pourrait être un abondant de mauvais code.Verilog: Stocker des bits dans une plage spécifique de bits d'un module initialisé
L'erreur recieved est en ligne 57
shift_r.D[DEST] = DIN; //supposed to be storing the data coming in into register
Erreur Readout: Verilog Erreur de syntaxe, texte près: "=". Vérifier et corriger les erreurs de syntaxe qui apparaissent immédiatement avant ou au mot clé spécifié
`include "CPU_8/my_incl.vh"
module CPU(CLK,RST,WRITE,READ,ADDRESS,DOUT,DIN);
input RST,CLK;
input [0:7] DIN; //DATA in
output reg [0:7] ADDRESS;
output reg [0:7] DOUT; //DATA OUT
output reg WRITE,READ;
reg [0:15] INST;
//I am not sure if i set up the array for my registers correctly either
shiftreg shift_r[0:15] (RST, CLK, D, Q); //initialize shift_r and create array of 16 registers.
//Implicit net is created for the D and Q above when generating block file
instRom_16 instRoms(ADDRESS, INST); //intialize InstRom_16 module
reg [0:3]OP; // opcode
reg [0:3]ARG1; // first arg
reg [0:3]ARG2; // second arg
reg [0:3]DEST; // destination arg
reg [0:7]CONSTANT; //Constant
[email protected](posedge CLK)
begin
WRITE = 0; // don't write
READ = 0; // don't read
ADDRESS = 8'b0; // don't care
DOUT = 8'b0; // don't care
instRoms.ADDRESS = shift_r.D[0]; //Set shift_reg to be program counter
shift_r.D = shift_r.Q[0] + 1; //increment program counter.
OP = instRoms.INST[15:12]; // opcode first 4 bits
DEST = instRoms.INST[11:8]; // destination one 4 bits
ARG1 = instRoms.INST[7:4]; // argument2 is next 4 bits
ARG2 = instRoms.INST[3:0]; // ARGUMENT2 is last 4 bits
CONSTANT = instRoms.INST[7:0];
//PERFORM OPERATIONS
case (OP)
4'd1: //tried to use `LOAD but that wouldn't point to the value in my include file
READ = 1; // request a read
//line that is failing
shift_r.D[DEST] = DIN; //supposed to be storing the data coming in into register
//4'd2:
endcase
end
endmodule
Ceci est mon fichier include
`ifndef _my_incl_vh_
`define _my_incl_vh_
`define NOP = 4'd0; // 0 filled
`define LOAD = 4'd1; // load
`endif
Salut, s'il vous plaît expliquer ce que vous entendez par « ne pas être en mesure d'avoir plusieurs cas », qui ne semble pas avoir de sens. S'il vous plaît voter si ma réponse était de toute aide. – chrisvp
Je voulais dire plusieurs déclarations par cas. Je devrais probablement supprimer ce commentaire. Editer: Ancien commentaire supprimé car mauvaise faute de frappe, voici le correctif avec le libellé correct "Ajout d'un début et une fin pour un cas multi-instruction corrigé mon erreur de ne pas avoir plusieurs instructions par cas" – Laburtz