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 "firmado", o "sin signo"
En o cerca de la línea 4 hay un error, cerca de un poco 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 de conexión, debe proporcionar un identificador (el nombre de una conexión), o un [ (en el caso de una conexión de múltiples bits), o especificar si la conexión es signed o unsigned (defecto). En su lugar, ha utilizado una palabra clave reservada reg .
No puedes tener una señal que sea tanto un cable como un registro.
A continuación, suponiendo que pretende que PD sea un reg , la línea assign PD[7:0]= PDin[7:0]; también es un error: no puede asignar un registro usando una instrucción de asignación. Si pretendía que PD fuera wire , no podrá usarlo en el bloque always más adelante.
No usé PD
Sí, lo hizo, lo utilizó como objetivo tanto de una asignación de procedimiento como de una asignación continua. Así que lo usaste. Y de una manera que no está permitida (ver arriba).
Como tercer punto, para facilitar la lectura, todas sus declaraciones if , else y always deben tener un begin y una palabra clave end . Usa begin / end de la misma manera que usarías { / } en C. Puede parecer tedioso, pero es una buena práctica y te ahorrará tiempo a largo plazo.
Como punto final, si desea realizar alguna acción (por ejemplo, enviar bits de datos) en un evento (por ejemplo, una señal alta), debe considerar la creación de una máquina de estados para controlar el flujo. Recuerde que todo lo que está describiendo con Verilog es hardware (por lo tanto, HDL), por lo que si desea realizar una secuencia de acciones, necesita un constructo de hardware que haga eso: una máquina de estado es un ejemplo.