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.