1 votos

Envío de datos de 8 bits en serie

Estoy tratando de enviar datos paralelos de 8 bits en serie. Cuando Send es 1, debería empezar a enviar datos. Se muestra en la siguiente figura. enter image description here

module transmitter(Clk, Send, PDin, SCout, SDout);
input Clk, Send;
input [7:0] PDin;
wire reg [7:0] PD;

assign PD[7:0]= PDin[7:0];

output SCout;
output reg SDout;

always@(posedge Clk)
    PD[7:1] <= PD[6:0];

assign SCout = Clk;

always@(posedge SCout)
    if(Send== 1'b1)
       SDout <= 1'b1;
    else
       SDout <= PDin[7];

endmodule

Aquí,

wire reg [7:0] PD;

arroja un error.

Error (10170): Error de sintaxis de Verilog HDL en transmitter.v(4) cerca del texto "reg"; esperando un identificador ("reg" es una palabra clave reservada ), o "[", o "signed", o "unsigned"

No utilicé PD y se había desplazado PDin en siempre bloque antes, sin embargo, dijo PDin no puede ser a la vez input y reg. Por lo tanto, he actualizado el código como en lo anterior.

2voto

Tom Carpenter Puntos 7192

Primero veamos el mensaje de error.

Error (10170): Error de sintaxis de Verilog HDL en transmitter.v (4) cerca del texto "reg" ; esperando un identificador ("reg" es una palabra clave reservada ), o "[", o "signed", o "unsigned"

En la línea 4, o cerca de ella, hay un error, cerca de un trozo de texto que dice "reg".

En la línea 4 tenemos wire reg [7:0] PD; - Veo el texto "reg".

Después de la palabra clave wire, hay que dar un identificador (el nombre de un cable), o un [ (en el caso de un cable de varios bits), o especificar si el cable es signed ou unsigned (por defecto). En su lugar ha utilizado una palabra clave reservada reg .

No se puede tener una señal que sea a la vez un cable y un registro.


A continuación, suponiendo que tenga la intención de PD para ser un reg la línea assign PD[7:0]= PDin[7:0]; también es un error - no se puede asignar un reg utilizando una sentencia assign. Si pretendía PD para ser un wire entonces no se puede utilizar en el always bloque más adelante.

No utilicé PD

Sí lo hiciste, lo usaste como objetivo de una asignación de procedimiento y de una asignación continua. Por lo tanto, lo utilizó. Y de una manera que no está permitida (ver arriba).


Como tercer punto, para la legibilidad, todos sus if , else y always deben tener un begin y un end palabra clave. Se utiliza begin / end de la misma manera que utilizaría { / } en C. Puede parecer tedioso, pero es una buena práctica y le ahorrará tiempo a la larga.


Como punto final, si quieres realizar alguna acción (por ejemplo, el envío de bits de datos) en un evento (por ejemplo, una señal que se eleva), debes buscar la construcción de una máquina de estado para controlar el flujo. Recuerda que todo lo que estás describiendo con Verilog es hardware (de ahí el HDL), así que si quieres realizar una secuencia de acciones, necesitas una construcción de hardware que lo haga - una máquina de estado es un ejemplo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X