You are on page 1of 40

412

PICOBLAZE DESARROLLO de CDIGO de la ASAMBLEA

//

CAPTULO 17

PICOBLAZE Yo/O INTERFAZ

17.1

INTRODUCCIN

A interact con el externo environment, un chip de microcontrolador regular consiste de una variedad de
construido-dentro yo/O perifricos, como un UART, SPI (serial interfaz perifrica), temporizador, y tan
encima. Cundo empezando un desarrollo nuevo, seleccionamos un chip de microcontrolador segn el
yo/O requerirments de la aplicacin y a veces puede necesitar utilizar chips adicionales para realizar m enos
funciones utilizadas generalmente.
A diferencia de un microcontrolador regular, PicoBlaze tiene no construido -dentro yo/O perifricos.
l justo provides una entrada genrica sencilla y estructura de produccin para un yo/O interfaz. Yo/O los
perifricos estn construidos tan necesitados y as es customized a cada aplicacin. PicoBlaze Utiliza la
entrada e instrucciones de produccin para transferir dato entre sus registros internos y yo/O puertos, y
su interfaz consiste de las seales siguientes:
Puerto.id: Una seal de 8 bits que especifica el puerto id (i.e., direccin de puerto) de una entrada
o instruccin de produccin
Dentro.Puerto: una seal de 8 bits donde PicoBlaze obtiene dato de entrada durante operacin de
unn instruccin de entrada
Fuera de_puerto: una seal de 8 bits donde PicoBlaze dato de produccin de los sitios durante
operacin de una instruccin de produccin
Ledo_strobe: una seal de 1 bits que est afirmada en el segundo ciclo de reloj de una instruccin
de entrada
Escribe_strobe: una seal de 1 bits que est afirmada en el segundo ciclo de reloj de una
instruccin de produccin

FPGA Prototyping Por Verilog Ejemplos. Por Pong P. Chu


Copyright 2008 John Wiley & Hijos, Inc.

415

Figura 17.1 Cronometrando esquema de una instruccin de produccin.


A pesar de que hay slo dos puertos de 8 bits a entrada y dato de produccin, el puerto de 8 bits_id la
seal puede soler distinguir perifricos diferentes, y por ello est dicho que PicoBlaze puede apoyar hasta
256 (i.e., 2 8) puertos de entrada y 256 puertos de produccin.
En el captulo restante, examinamos el detallado yo/O cronometrando de PicoBlaze e ilustrar el yo/O
desarrollo de interfaz por aadir una serie de perifricos para el circuito cuadrado de Captulo 16.

17.2

PUERTO de PRODUCCIN

PUERTO de PRODUCCIN 417

Figura 17.2 descodificacin de Produccin de four registros de produccin.


Mesa 17.1 mesa de Verdad de un circuito de descodificacin
Escribe_strobe

0
1
1
1
1

17.2.1

Dentropuesto Puerto_id[0] Producci


n
Puerto.id [1]
en_d

0000
0
0
1
1

0
1
0
1

0001
0010
0100
1000

Interfaz de produccin

La interfaz de produccin entre PicoBlaze y un perifrico de produccin normalmente consiste de un


circuito de descodificacin y produccin necesaria buffers, los cuales son normalmente una variedad de
registros. El circuito de descodificacin decodes el puerto id y genera un habilitar tick consiguientemente.
Despus de que la instruccin de produccin, el dato ser almacenado en el designado buffer.
Para ilustrar la construccin, dejado nos considera un PicoBlaze interfaz con cuatro produccin buffers.
Asignamos 00 16, 01i6, 02i6, y 03i 6 cuando su puerto ids. Nota que el seis MSBs de las direcciones de puerto
son idnticas y slo dos LSBs est necesitado para distinguir un puerto. El esquema de bloque est
mostrado en Figura 17.2. La llave es el circuito de descodificacin, cuya mesa de funcin est mostrada
en Mesa 17.1. Es un 2-a-2 2 descodificador. En el segundo reloj cycle de una instruccin de produccin,
escribe_strobe est afirmado y 1 mordi del 4-mordi en_d la seal est afirmada consiguientemente. Elreloj-el ciclo habilita tick activates el registro de produccin correspondiente para recuperar dato del fuera
de_seal de puerto. La descodificacin que cronometra diagram de la instruccin
Produccin tan, 02

418 PICOBLAZE yo/O INTERFAZ


Est mostrado en el fondo de Figura 17.1. Durante el segundo ciclo de reloj de la instruccin de
produccin, el en_d[2] la seal est afirmada y el valor de dato en fuera.El puerto est almacenado en el
correspondiente buffer en el borde de aumentar del reloj prximo.
Una vez entendiendo la operacin bsica, podemos derivar el HDL cdigo consiguientemente. El
segmento de cdigo es

Siempre @*
Si (escribe_strobe)
Caso (puerto_id [1:0])
2'bOO: en_d = 4'bOOOl ;
2'bOl: en_d = 4'bOOlO;
2'blO: en_d = 4'b0100;
2'bll: en_d = 4'bl000;
endcase ms
en_d = 4'b0000;
Este esquema es muy general y puede ser aplicado a cualquier nmero de puertos de produccin.
La eleccin de la direccin de puerto es un poco arbitrario. Utilizamos el binary cdigo en el previous
ejemplo. Si el nmero del puerto de produccin es ms pequeo que ocho, un -el cdigo caliente puede
soler simplificar el circuito de descodificacin. Por ejemplo, podemos definir el cuatro puerto anterior ids
como 01i6 (i.e., 00000001 2), 0216 (i.e., 00000010 2), 0UnU (i.e., 00000100 2), y 08i6 (i.e., OOOOIOOO 2).
La lgica de descodificacin puede ser simplificada a

Siempre 0*
Si (escribe_strobe)
en_d = Puerto_id
[3:0] ; ms
en_d = 4'bOOOO ;
Nota que ninguna lgica de descodificacin est necesitada si hay slo un puerto de produccin solo. El
wr ite.strobe La seal puede ser conectada al registro es habilita seal, cuando mostrado en Figura 16.3.
Cuando hablado en Seccin 16.4.2, es prctica buena para utilizar alias simblicos para yo/O puertos y
declarar su binary direcciones en el encabezamiento. Por ejemplo, la direccin de puerto de produccin
inicial asnoignment puede ser declarado cuando
; ----------------- Definiciones de puerto de la produccin -----------

Constante
fuera
de_puerto_un,
00
constante
fuera
de_puerto_b, 01 constante
fuera
de_puerto_c,
02
constante
fuera
de_puerto_d , 04
Si el assignment est cambiado, necesitamos modificar el encabezamiento pero mantener el cdigo d e
asamblea restante intacto. Utilizando un encabezamiento claro tambin nos deja fcilmente para
identificar el puerto ids cundo el compaero HDL el cdigo est desarrollado.

17.3
17.3.1

PUERTO de ENTRADA
Instruccin de entrada y cronometrando

La instruccin de entrada lee dato del puerto de entrada. Similar a la instruccin de produccin, tiene
dos formas:

Entrada sX, (sY)


Entrada sX, nombrede puerto

PUERTO de ENTRADA
419

sampled Dato

essampled

Figura 17.3 Cronometrando esquema de una instruccin de entrada.

El sY registro o puerto jiame especifica el puerto ledo id. El dato recuperado est almacenado en el sX
registro.
El esquema de cronometrar de una instruccin de
entrada, e n t r a d a t a n , 0 2
Est mostrado en Figura 17.3. Cundo la instruccin est ejecutada, 02 est colocado en puerto.id. Despus
de dos ciclos de reloj, en_el puerto ser sampled en el borde de aumentar del reloj y su valor est
almacenado en el tan registro. El circuito externo tiene que asegurar que el dato de entrada es establo
durante el borde de muestreo para evitar un cronometrando violation.
Cuando en la instruccin de produccin, el ledo_strobe la seal est afirmada en el segundo ciclo de
reloj. La funcin del ledo_strobe la seal es menos obvio y est hablado en el prximo subsection.

17.3.2

Interfaz de entrada

La interfaz de entrada entre PicoBlaze y perifricos de entrada normalmente consiste de un multi plexing
circuito, el cual utiliza puerto_id como la seal de seleccin a ruta el valor deseado a en_puerto. A veces,
un circuito de descodificacin similar al en la interfaz de produccin es tambin necesario de sealar la
conclusin del acceso de dato.
Para el propsito de diseo de interfaz de la entrada, un puerto de entrada puede ser clasificado como
continuo- acceso o puerto de acceso solo. Para un puerto de acceso continuo, el dato est presentado continuously, como la entrada de cambio de Seccin 16.4.1. Por otro lado, la disponibilidad del dato de un puerto
de acceso solo est provocado por un solo discrete acontecimiento, como recibir un carcter en un UART
buffer. La bandera FF y buffers habl en Seccin 8.2.4 es en esta categora. Despus de que el dato est
recuperado, lo tenemos que sacar del buffer para impedir el mismo dato de ser proces otra vez. Esto es
normalmente hecho por utilizar un un-reloj-ciclo tick para aclarar la bandera FF o sacar una palabra de un
FIFO buffer.
La interfaz para puertos de acceso continuo implica slo un multiplexing circuito. Considerar una
interfaz con cuatro tales puertos. El esquema de bloque est mostrado en Figura 17.4.
La interfaz para puertos de acceso solo necesita un mecanismo para sacar el dato recuperado del buffer
al final de una instruccin de entrada. Esto puede ser hecho por utilizar una descodificacin circuit que
decodes el puerto-id y ledo.strobe Seales. El circuito es idntico al circuito de descodificacin de la
interfaz de produccin excepto que escribe_strobe est reemplazado por ledo_strobe. El decoded la
produccin puede ser considerada como seal de extraccin, el cual es afirmaed para un reloj

420 PICOBLAZE yo/O INTERFAZ


En jxxt

Fuera de_puerto

Reinicializa
cin

Puerto_id

Instruccin

Ledo_strobe
wiite_strobe

Interrumpe

intemjpt_ack
Direccin

>

KCPSM3

Figura 17.4 esquema de Bloque de cuatro puertos de acceso continuo.


En_dataO
Dato

En_puerto
Reinicializa
cin

Fuera de_puerto
Puerto_ld

Instruccin

Ledo.strobe
wnte_strobe

Interrumpe

intemipt_ack
Direccin

>

KCPSM3

Figura 17.5 esquema de Bloque de cuatro puertos de acceso solo.

Ciclo y saca el dato anteriormente recuperado. Considerar una interfaz con cuatro FIFOs. El esquema de
la descodificacin completa y multiplexing el circuito est mostrado en Figura 17.5. El rv la seal es el
decoded seal de extraccin. Al final de una instruccin de entrada, 1 mordi d e esta seal de 4 bits est
afirmada y el correspondiente FIFO acta una operacin leda, en el cual la primera palabra est sacada
del buffer. Supone que 00i6, 01i6, 02i6, y 03i6 est asignado como el puerto ids. El HDL segmento de
cdigo para la interfaz es
//

multiplexing

Circuito

siempre 0*
Caso (puerto_id [1: 0])

2
2
2
2

bOO
:
bOl
:
blO
:
bl 1
e n d c a s e:
// Circuito de
descodificacin

Dato
Dato
Dato
Dato

=
=
=
=

De
nt
De
ro
nt
De
ro
nt
De
ro
nt
ro

_Dato0;
_datal;
_Dato2;
_Dato3;

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA

421

Siempre Q*
Si (ledo.strobe)
Caso (puerto_id [1:0])
2'bOO:

rv

4'bOOOl

2'b01: rv = 4'b0010 2'blO: rv =


4'bOlOO

2'bll:

rv

4'bl000

endcase ms
rv = 4'b0000;

En una aplicacin real, es probablemente que la interfaz de entrada contiene ambos continuo- y puertos
de acceso solo. Un circuito de descodificacin es slo necesitado para puertos de acceso solo.

17.4

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO


INTERFAZ de EXHIBICIN DIRIGIDA

Para demostrar la construccin del PicoBlaze yo/O interfaz, aadimos ms versatile entrada y perifricos
de produccin a la rutina cuadrada de Captulo 16. Recuerda que la rutina cuadrada calcula un2 + ft2, donde
un y b es 8-mordi unsigned enteros.
Utilizamos el cambio de 8 bits y un pushbutton para introducir los valores de un y b. El pushbutton
genera un un-reloj-ciclo tick cundo pulsado. El tick indica que el valor actual del cambio tendra que ser
cargado. Los valores de un y b est cargado alternately; i.e., el primer prensado carga un, las segundas
cargas de prensado b, el tercio que empuja cargas un, y tan encima. Un segundo pushbutton es tambin
incluido para aclarar el PicoBlaze RAM de dato y registros pertinentes.
Utilizamos cuatro siete-segmento LEDs para mostrar las entradas y resultados computados. El LEDs
est arreglado como cuatro nmeros hexadecimales. Desde la gama de un 2 + b2 es hasta 17 bits, el punto
decimal del leftmost DIRIGI est utilizado para el MSB. Los tres bits ms bajos del cambio sele ccionan
qu para mostrar, los cuales pueden ser un, b, u n 2 , b 2 , o un 2 + b 2 .
En resumen, la interfaz consiste del siguiente:
Cambio', proporciona los valores de un y b y selecciona el contenido de la exhibicin DIRIGIDA
Pushbutton 0: cargas el un y b alternately cuando puls
Pushbutton 1: aclara RAM de dato y los registros pertinentes cundo pulsados
Siete-el segmento DIRIGIDO', muestra el seleccionado valor de 17 bits en cuatro dgitos
hexadecimales

17.4.1

Interfaz de produccin

Recuerda que el cuatro siete-segmento LEDs en el prototyping el tablero comparte los mismos alfileres
de entrada, y un tiempo-multiplexing el circuito est requerido. Para un PicoBlaze-diseo basado, el
multiplexing puede ser hecho por cualquiera un external circuito o una rutina de softw are. Utilizamos el
extemal-aproximacin de circuito, el cual es ms sencillo para desarrollo de cdigo de la asamblea, en
esta seccin y hablar la aproximacin de software en Captulo 18. El tiempo DIRIGIDO -multiplexing el
circuito diseado en Seccin 4.5.1 puede ser utilizado para este propsito. Estos escudos de circuito el
cronometrando y aparece como cuatro independiente siete-segmento LEDs para un sistema externo. El
esquema de bloque del PicoBlaze interfaz de produccin est mostrada en Figura 17.6. La interfaz consiste
de cuatro produccin de 8 bits puertos, each el puerto que representa un siete-segmento patrn DIRIGIDO.
En el cdigo de asamblea, los cuatro patrones DIRIGIDOS estn almacenados en PicoBlaze RAM de
dato con direcciones simblicas de ledO, ledl, dirigi2, y dirigi3. El segmento de cdigo correspondiente
es

422 PICOBLAZE yo/O INTERFAZ

Figura 17.6 interfaz de Produccin de un circuito cuadrado.

; Alias
de

de

RAM

direccin
de

dato

c o n s t a n t e ledO , 10
c o n s t a n t e ledl, 11
c o n s t a n t e dirigi2
,
12
constante
dirigi3 , 13
; Definiciones de puerto de la produccin

Constante
Constante
Constante
Constante

sseg0puerto , 00
ssegl_puerto , 01
sseg2puerto , 02
sseg3puerto , 03

;7seg

dirigi

;7seg

dirigi

;7seg

dirigi

;7seg

dirigi

disp_Dirigi :
f e t c h Dato, ledO d a t o de
produccin, sseg0puerto
f e t c h dato, ledl d a t o de
produccin, ssegl_puerto
f e t c h dato, dirigi2 d a t o
de produccin, sseg2puerto
f e t c h dato, dirigi3 d a t o
de produccin, sseg3regreso
de puerto

17.4.2

Interfaz de entrada

La interfaz de entrada consiste de un cambio de 8 bits y dos 1-mordi pushbuttons. El anterior es un puerto
de acceso continuo desde el valor es siempre presente. El ltimo es un puerto de acceso solo desde pulsar
unas ventajas de botn a slo un acontecimiento solo (p. ej., cargando un al registro una vez bastante

Figura 17.7 interfaz de Entrada de un circuito cuadrado.

Que continuamente). Debido al mecnico glitches, un debouncing el circuito est necesitado para generar
un limpio un-reloj-ciclo tick. Desde PicoBlaze el puerto puede tomar arriba de dato de 8 bits, entradas del
dos pushbuttons puede ser grouped junto como puerto de entrada sola. El esquema de bloque de la interfaz
de entrada est mostrado en Figura 17.7. La interfaz consiste de dos debouncing cir cuitos, un dos-a-un
multiplexor, un circuito de descodificacin, y dos bandera FFs. La funcin de la dos bandera FFs es
discussed en Seccin 8.2.4. Proporcionan un mecanismo para poner y aclarar el acontecimiento que pulsa
botn. Cundo un botn est pulsado, el debouncing la produccin del circuito pone la bandera. Queda
afirmado hasta que est recuperado por el PicoBlaze instruccin de entrada, el cual pone la seal de
seleccin del multiplexor a ruta el valor deseado a PicoBlaze puerto de entrada, y activates la seal clara.
Para claridad, nombramos el pushbutton 1 cuando el s botn (para poner el valor) y pushbutton 0 cuando
el c botn (para aclarar la RAM de dato).
El pseudo cdigo para procesar la entrada es
; Entrada las banderas de
botn ; si c=yo entonces
; Llamada el carnero deaclarar rutina
; si s 1 entonces ; valor de cambio de
la entrada ; lo almacena a carnero de
dato ; toggle un / b offset de direccin

Desde el s entradas de botn los valores de un und b alternately, utilizamos un registro global,
cambio_un_b, para mantener pista del cual uno est siendo ledo actualmente. El registro sirve como el
offset de direccin de RAM de dato, los cuales pueden ser 0 o 2, y su valor toggles cundo el s el botn
est pulsado. El correspondiente assembly subrutina de cdigo es
; Definiciones de puerto de la entrada

Constante rd_puertode bandera, 00 ;2 banderas


(xxxxxxsc): constante sw_puerto , 01
;8mordi
cambio

424 PICOBLAZE yo/O INTERFAZ

proc_btn:

Entrada s3, rd_puertode bandera ;consigue bandera


;control y proceso c botn

Prueba s3, 01
S a lt o z, c hk_ btns
Llamada init

; control c bandera de botn


;la bandera no puesta
;conjunto de bandera , salto claro

proc_btn_hecho chk_ btns:


;Control y proceso s

botn

Prueba s3, 02
; control s bandera de botn
S a lt o z, pr oc_ btn_ hec ho , ' l a b a n d e r a n o p u e s t a
Dat o de entrada, sw_puerto
;consigue cambio
Carga addr, un_lsb
;consigue addr de un
Aade addr, cambio_un_b ;aade offset
Dato de tienda, (addr)
; escribe dato a carnero
; La actualizacin actual disp

posicin

xor Cambia_un_b , 02 ; to g g le e n tr e 0 0, 0 2 proc_btn_hecho


: regreso

17.4.3

Desarrollo de cdigo de la asamblea

Despus de disear el yo/O interfaz, podemos derivar el programa de asamblea. El desarrollo sigue el
dividir-y-conquistar la aproximacin hablada en Captulo 16 y particiones el programa principal a varias
subrutinas. El programa principal es
Llamada init

; inicializacin

forever:
; Cuerpo de bucle principal

Lla mada proc_btn


; botones & de proceso del control
Plaza de llamada
; calcula cuadrado
Carga de llamada_dirigi_pttn ;tienda patrones dirigidos a carnero
Llamada disp_dirigi
; produccin patrn dirigido
Sa lt o forever
El cdigo completo est mostrado en Listado 17.1.
La subrutina cuadrada es de Captulo 16, y el proc_btn y disp_dirigi sub las rutinas estn habladas
en el dos que precede subsections. El init la subrutina acta inicializacin de sistema. Utiliza un bucle
para cargar 0 es a RAM de dato (i.e., aclara la RAM) y pone el cambio_un_b registro a 0 (i.e., ledo un).
La carga.Dirigido_pttn la subrutina lee la entrada de cambio, recupera los valores deseados de la RAM
de dato, convierte los valores a siete- segmento patrones DIRIGIDOS, y les almacena a las ubicaciones
correspondientes en la RAM de dato. Estos patrones son entonces escrito a los puertos de produccin en
el subsiguiente disp_dirigi rutinario. La carga_dirigi_pttn la rutina consiste del
conseguir_superior_nibble y conseguir .Ms bajo .nibble Rutinas para extraer los dos dgitos
hexadecimales y el hex.A.Dirigido rutinario de convertir un dgito hexadecimal al corresponding siete segmento patrn DIRIGIDO.
El programa requiere ms almacenamiento. Adems de la RAM de dato y los registros requirieron
para la subrutina cuadrada, este programa utiliza un registro global nuevo cambia_un_b para mantener
pista de si un o b est siendo ledo, y 4 bytes en RAM de dato, cuyas direcciones son labeled ledO, ledl,
dirigi2, y dirigi3, para almacenar cuatro siete-segmento patrones DIRIGIDOS.

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA 425

Listado 17.1 programa Cuadrado con un cambio y seven-segmento interfaz DIRIGIDA


Circuito cuadrado con 7seg interfaz DIRIGIDA
; Operacin de programa:
5

; ledo un y b de cambio : calcular un*un + b*b : dato de exhibicin

en 7seg dirigi

io ; Alias de direccin de RAM de dato

Constant
eC o n s t a n t
e onstant
C
15 ec o n s t a n t e
Constant
eC o n s t a n t
e onstant
C
eC o n s t a n t
20 ec o n s t a n t e
Constant
e onstant
C
eC o n s t a n t
eC o n s t a n t
e
25

Un_lsb
, _lsb ,
b

00
02

aa_lsb

, 04

aa.msb

, 05

bb_lsb

, 06

bb_ms
, 07
b
aabb_lsb ,

08

aabb_msb ,

09

aabb_cout ,

0U
n

ledO ,

10

ledl ,

11

Dirigid 12
o2 ,
Dirigid 13
o3 ,

Alias de registro
: Generalmente variables locales u tilizadas iu namereg tan , dato

; reg

para dato provisional

n a m e r e g s i , addr
namereg s2, i

/ reg para provisional mem & i/o puerto addr


:ndicede bucle de propsito general

:Variables globales
namereg si, cambio_un_b : offset de carnero para entrada de cam bio actual

Alias de puerto
; ----------------- Definiciones de puerto de la entrada -------40 c o n s t a n t e r d _ p u e r t o d e b a n d e r a , 0 0 ; 2 b a n d e r a s ( x x x x x x s c ) : c o n s t a n t e
sw_puerto , 01

:8mordi cambio

; ----------------- Definiciones de puerto de la produccin ----

C onstant e sseg0puerto, 00 ;7 s e g d i r i g i
c onstant e ssegl_puerto, 01 ;7 s e g d ir ig i 1
constante sseg2puerto , 02 ;7seg dirigi
constante sseg3puerto , 03 ;7seg dirigi 3

Programa principal
Llamando jerarqua:

0
45
2

426 PICOBLAZE yo/O INTERFAZ

Principal
init
proc-btn
init
Cuadrado
mult .Blando
Carga-dirigido.pttn
Consigue-ms bajo
.nibble
Consigue.Superiornibble
hex-A .Dirigido
disp Dirigido
Llamada init

Inicializacin

orever :
; Cuerpo de bucle principal
Llamada proc_btn

Botones & de proceso del control

Plaza de llamada

Calcula cuadrado

Carga de llamada_dirigi_pttn
Llamada disp_dirigi

Tienda patrones dirigidos a carnero


Produccin patrn dirigido

Salto f o r e v e r

Rutinario : init
Funcin : acta inicializacin , carnero de registro/claro
Produccin regis ter :
Cambio-un-b: aclarado a

temp Registro: dato, i


init :

; M e m o r i a clara
85 c a r g a i , 4 0

; unitize ndice de bucle a 64

Dato de carga,
00 clr_mem_bucle :
Dato de tienda, (i) sub i,
0 1 9 o salto nz ,

;dec ndice de bucle ;

clr_mem_bucle ; c a r g a d e

repite hasta i =0

re g i st ro claro
cambia_un_b, 00 regreso

95 ;=====================================================

;Rutinario : proc-btn
; Funcin : control dos botones y procesar la exhibicin ; entrada reg:
;

Cambio.Un.b: Offset de carnero (0 para un y 2 para b)

ioo ; Registro de produccin:


;

s3: bandera de puerto de entrada de tienda

Cambio.Un.b: Puede ser toggled

; temp El registro utiliz: dato, addr

105

proc_btn

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA 427

Entrada s3, rd_puertode bandera


;consigue bandera
;control y proceso c botn

; Control c bandera de

Prueba s3, 01
s a lt o z, c hk_ btns
lla mada init
Sa lt o proc_btn_hecho

botn ;la bandera no


puesta ; conjunto de
bandera , claro

chk_btns:

Botn

;Control y proceso s

; Control s bandera de

prueba s3, 02
sa lto z, proc_btn_dato
de
entrada
hecha,

botn ; la bandera no

sw_carga

;aade offset ; escribe

puesta ; consigue cambio


; consigue addr de un

de puerto addr, un_lsb


dato a carnero
;a Laad ae c at ud ad lri,z ac ac m
i bni oa_cut un a_ lb d i s p p o s i c i n
dx ao tr o d e t i e n d a , ( a d d0r 2)
; toggle Entre 00, 02
Cambia_un_b
proc_btn_hecho :

regreso
Rutinario: carga.Dirigido _pttn
Funcin: ledo 3 LSBs de entrada de cambio y convertir los valores
deseados a cuatro patrones dirigidos y cargarles a
carnero
Cambio: 000: un: 001 :b; 010:un2: 011: b ' 2 ;
otros : un'2 + b 2 temp el registro utiliz: dato, addr s6: dato
de sw puerto de entrada

Es? : ----------------------------------La carga_dirigi_pttn:

Entrada s6,
sw_puerto s 10 s6
Compara s6 , 08
Ningn sa lt o c , sw_ok c a rga s6,

: Consigue cambio

08 sw_ok:

; S , en' error , marca default

:*2 para obtener addr offset ; sw>


100?
; No

;Byte de proceso 0, carga

m s b a j a addr , u n _ l s b

145

aade

nibble

addr , s 6

fetch Dato, (s6) la lla mada


consigue_ms baja_nibble

lla mada hex_a_dato d e


tienda dirigida , ledO iso
;byte de proceso 0,
superior fetch dato, (addr)

la llamada
consigue_superior_nibble

lla mada hex_a_dato d e


t i e n d a d i r i g i d a , l e d l 155
byte de proceso 1 ms bajo
a a d i r addr , 0 1 f e t c h d a t o ,
(addr) la llamada

; Consigue ms bajo
addr

byte

ms

consigue

consigue
bajo
ms

bajo

nibble ; convierte a
patrn dirigido

nibble

consigue_ms baja_nibble

nibble ;Consigue superior addr

428

PICOBLAZE Yo/O INTERFAZ

Lla m ada hex_a_dirigido


iso d a t o d e t i e n d a ,
dirigi2
;Byte de proceso yo, superior nibble
f eat clhl adm
a taod, a( a d d r )
L
consigue_superior_nibble

lla mada hex_a_dirigido


i65 ; control para sw =

El proceso lleva tan dirigido


dp ; exhibicin resultado
final?

yo00 para comparar s6 ,


08 salto nz,

; No

dirigi_hecho aade

;Consigue lleva addr ;s6 para

addr, 01 feteh s6 , (addr)

almacenar llevar ;lleva=1?


; No

170 p r u e b a s 6 , 0 1

;S , afirma msb (dp) a 0

S a lt o z,
dirigi_hecho y dato ,
7F dirigi_hecho :

Dato de tienda,
d i r i g i 3 175 r e g r e s o
Rutinario : disp -dirigido
Funcin : produccin cuatro patrones
dirigidos temp el registro utiliz: dato
disp_Dirigi :

fetch Dato,
dato

ledO
de sseg0puerto

produccin,

fetch dato,
dato

ledl
ssegl_Puerto
de Dirigido2

produccin,

sseg2puerto

fetch dato,
dato

de sseg3puerto

Dirigido3

produccin,

fetch dato,
dato

de

p
R ru ot idnuacrciio:n ,h e x . A . D i r i g i d o

r e g rFeusnoc i n : c o n v e r t i r u n h e x d g i t o a 7 s e g r e g i s t r o d e e n t r a d a d e
patrn dirigido: registro de produccin del dato: dato

hex_A_dirigido:

Compara dato , 00
sa lto n z, comp_hex_l
dato de carga, 81
s a lto hex_hecho

7seg patrn 0

comp_hex_l :

Compara dato , 01
sa lto n z, comp_hex_2 d ato
de carga, CF salto
hex.Hecho comp_hex_2 :

C ompa ra dato, 02 sa lt o
n z, comp_hex_3

7seg patrn 1

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA

Dato de carga,

;7seg patrn 2

92 s a lt o hex_hecho
comp_hex_3 :
215

c o m p a r a dato , 03
Salto nz, comp_hex_4
dato de carga, 86 salto

;7seg patrn 3

hex_hecho comp_hex_4 :
220

compara dato, 04
Salto nz, comp_hex_5
dato de carga, CC salto
hex.Hecho comp_hex_5:

225

; 7seg patrn 4

c ompara dato, 05
Salto nz, comp_hex_6
dato de carga, Un4 salto
hex_hecho comp_hex_6 :

230

compara dato , 06
Sa lt o n z , comp_hex_7
dato de carga, Un0 salto

; 7 seg patrn 5

hex.Hecho comp_hex_7:
235

compara data , 07
Salto nz, comp_hex_8
dato de carga, 8F salto

; 7seg patrn 6

hex.Hecho comp_hex_8 :
240

c ompa ra dato, 08
Sa lt o n z , comp_liex_9
dato de carga, 80 salto

; 7seg patrn 7

hex_hecho comp_hex_9 :
245

c o m p a r a dato , 09
Sa lt o n z, coip.hex.Un
dato de carga, 84 salto
hex_hecho comp_hex_un:

250

compara dato, 0Un


Salto nz, comp_hex_b
dato de carga, 88 salto

; 7seg patrn 8

hex_hecho comp_hex_b :
255

compara dato , 0B
Salto nz, comp_hex_c
dato de carga, E0 salto

; 7seg patrn 9

hex_hecho comp_hex_c :
260

c o m p a r a dato, 0C
Salto nz, comp_hex_d
dato de carga, B1 salto

; 7seg patrn un

hex.Hecho comp_hex_d:

; 7seg patrn b

; 7seg patrn C

429

430 PICOBLAZE yo/O INTERFAZ


265 compara dato , 0D
Sa lt o n z , comp_hex_e
Dato de carga, C2
; 7seg patrn d
S a lt o hex_hecho comp_hex_e:
270 c o m p a r a d a t o , O E
Salto nz, comp_hex_f
Dato de carga, BO
;7seg patrn E
S a l t o hex.Hecho c o m p _ h e x _ f :
275 d a t o d e c a r g a , B 8
;7seg patrn F
hex_Hecho :

regreso

o ; rutinario : consigue.Ms bajo.nibble


; Funcin: consigue ms bajo 4 bits de dato : registro
de entrada : dato : registro de produccin: dato

285 consigue_ms bajo_nibble :


;Claro superior nibble

y dat o, DE regreso.

290

; rout ine : consigue.Superior.nibble

: Funcin: consigue superior 4 bits de dentro.Dato ;


registro de entrada: dato ; registro de produccin: dato

295 c o n s i g u e _ s u p e r i o r _ n i b b l e :

srO Dato
srO Dato
srO dato srO
dato

; cambio correcto 4 tiempo

300 r e g r e s o

ro utine: Cuadrado
Funcin : calcular un*un + b*b
Resultado/de dato almacenado en el carnero empez w/
SQJASE^4DDR t e m p r e g i s t r o : s 3 , s 4 , s 5 , s 6 , d a t o
Cuadrado:
;Calcular

un*un

fetch s3,
fetch s4,
llamada

un_lsb

Carga una carga un

un_lsb

Calcular un*un
Tienda byte ms bajo de

mult_tienda

un*un

blanda s6 , aa_lsb
tienda s5, aa_msb

Tienda byte superior de

calcula

un*un

b*b

fetch
s3,
b_lsb
fetch s4 , b_lsb

Carga b carga b

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA 431

Llamada mult_t ienda

Calcula b*b

blanda s6, bb_lsb t ienda

Tienda byte ms bajo de b*b

s5, bb_msb ; calcular

Tienda byte superior de b*b

un*un+b*b fetch dato,


aa_lsb aade dato , s6

Consigue byte ms bajo de un*un

dato de t ienda, aabblsb

aadir byte ms bajo de


un*un+b*b tienda byte ms bajo

f e t c h Dato,

aa_msb

addcy

s5

dato, d a t o
de tienda,
dato
de
carga
,

superior de un*un aadir byte

aabb_msb

byte superior de un*un+b*b dato

00

claro, pero mantener llevar

aabb_cout

conseguir llevar de la tienda


anterior lleva de un*un+b*b

^ !

regreso

^ l o
i

dato, d a t o
de tienda,

superior de un*un+b*b tienda

00

addcy

; Rutinario

de un*un+b*b conseguir byte

Funcin: 8mordi unsigned


Cambioyaadir

multiplier Utilizando
Igor lo hm

Registro de entrada :
:s 3 :
multiplicand
:

3
4
0

s4:

multiplier

Produccin

Registro

.? 5 :

; s 6
;

3
4
5

Byte superior de producto


Byte ms bajo de producto

temp Registro: i

mult_Blando:

Carga s5, 00
Carga i,

08

Claro s5

; initialize ndice de bucle

mult_Bucle:

srO s4
3
5
0

Salto nc
Aade s5 ,

: Cambio Isb para llevar


, cambio_prod

s3

Isb Es 0
Isb Es 1

Cambio_prod

sra s6

Cambio derecho de byte


superior ,

L l e v a a M S B , LSB p a r a l l e v a r
Derecho de byte de torre de cambio

sub i ,

01

Isb de s5 a MSB de s6
dec ndice de bucle

, mult_bucle

Repite hasta i =0

sra s5
355

Salto nz

Regreso

17.4.4

HDL Desarrollo de cdigo

El completo HDL el cdigo sencillamente combina el PicoBlaze procesador, ROM de instruccin, la


interfaz de entrada y los perifricos mostrados en Figura 17.7, y la interfaz de produccin y los perifricos
mostrados en Figura 17.6. Est mostrado en Listado 17.2.

PICOBLAZE Yo/O INTERFAZ

Listado 17.2 PicoBlaze con un cambio y siete-segmento interfaz DIRIGIDA


Mdulo pico_btn (
Ante de cable de la entrada,
reinicializacin,

cable

de

entrada [7:0] sw, cable de


entrada [1:0] btn, cable de
produccin [3:0] un, cable
d e p r o d u c c i n [ 7 : 0 ] s s e g );
// Seal declaration
/ / KCPSM3 seales d e R O M
Cable [9:0] direccin;
Cable [17:0] instruccin;
Cable [7:0] puerto_id , f uera de_puerto;
reg [7:0] en_puerto ;
El cable escribe_strobe, ledo_strobe;
// Yo/O produccin de
seales del puerto
habilita reg [3:0]
en_d;
// Cuatro dgito sietesegmento exhibicin dirigida
reg [7:0] ds3_reg , ds2_reg , dsl.reg , ds0_reg;
// Dos pushbuttons
reg btnc_Bandera_reg, btns.Bandera_reg;
Cable btnc_bandera_luego, btns_bandera_luego;
El cable pone_btnc_bandera, puesto_btns_bandera, clr_btn_bandera;
//Cuerpo
/ / ==================================================

// Yo/O mdulos //

==================================================

disp.mux disp_Unidad
(.clk(clk), .Reinicializacin(reinicializacin) ,
.En3(ds3_reg) , .En2(ds2_reg) , .ini(dsl_reg) ,
. inO(ds0_reg) , .Un(un), . sseg(sseg)) ; debounce
btnc_Unidad
(.clk(clk), .Reinicializacin(reinicializacin) , .sw(btn[0]),
.db_Nivel(), .db_tick(Puesto_btnc_bandera)) ; debounce
btns_unidad
(.clk(clk), .Reinicializacin(reinicializacin), .sw(btn[l]),
.db_Nivel(), .db_tick(Puesto_btns_bandera));

//

==================================================

/ / KCPSM Y ROM i n s t a n t i a t i o n / /

========================================= =========

kcpsm3 proc_unidad
(.clk(clk), .Reinicializacin(1'bO) , . Direccin(direccin) ,
. Instruccin(instruccin), ,puerto_id(puerto_id) ,
.Escribe_strobe(escribe_strobe),

.Fuera

de_puerto(fuera

de_puerto), .Ledo.strobe(Ledo.strobe), .En_puerto(en_p uerto),


.Interrumpe(1'bO), .Interrumpe_ack());
btn.rom r o m . U n i d a d
(.clk(clk), .Direccin(direccin) ,
. Instruye in(instruye in)) ;

PROGRAMA CUADRADO CON Un CAMBIO Y SIETE-SEGMENTO INTERFAZ de EXHIBICIN DIRIGIDA 433

Interfaz de produccin
outport

Puerto id:

0x00:
0x01 :

dsO
ds 1

0x02 :

ds 2

0x03 :

ds3

// R e g i s t r o s s i e m p r e
@(posedge ante) empieza
i f ( en_d [0] )
ds0_reg <= f uera
de_puerto ; i f (en_d [1])
dsl_reg <= Fuera.Puerto ;
i f (en_d [2])
ds2_reg <= f uera
de_puerto ; i f (en_d [3])
ds3_reg <= f uera de_puerto ;
Fin
// Circuito de descodificacin para habilitar
seales siempre @*
Si (escribe_strobe)
Caso (puerto_id [1:0])
2'b00: en_d = 4'b0001;
2'bOl: en_d = 4'b0010;
2'blO : en_d = 4'b0100 ;
2'bll: en_d = 4'blOOO ;
endcase ms
en_d = 4'bOOOO ;

//
//
//
//
//
//

//

Interfaz de entrada

Puerto
entrada

de
id

0x00:
bandera
===================================:

/ / R e g i s t r o 0dxe0 1e n t r a d a :( p a r a b a n d e r a s )
s i e m p r e @ (cpaoms eb di og e a n t e )
empieza
btnc_Bandera_reg <=
btnc_bandera_luego;
btns_bandera_reg <=
btns_bandera_luego;
Fin

(Puesto_btnc_band
era)
(clr_btn_Bandera)

Asigna btnc_bandera_luego

btnc_Bandera_reg;

Asigna btns_bandera_luego =

(Puesto_btns_band
(e cr lar)_ b t n _ B a n d e r a )
btns_Bandera_reg;

// Circuito de descodificacin para seales claras

?
?

1 '
bl
1
'bO

1 'bl

1
'bO

434

PICOBLAZE Yo/O INTERFAZ

Asigna clr_btn_la bandera = leda_strobe && (puerto_id [0]==1 'bO);


// Entrada multiplexing siempre 0*
Caso(puerto_id [0])
Ningn

1 ' bO : en_puerto = {6'bO , btns_bandera_reg , btnc_bandera_re g>;


l'bl: Dentro.Puerto =
sw; endcase

endmodule

17.5

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART


CONSOLA

En esta seccin, aadimos dos ms yo/O perifricos al diseo anterior. Uno es un combi nacional
multiplier, el cual acelera la multiplicacin, y el otro es un UART, el cual proporciona un enlace de
comunicacin a un PC.

17.5.1

Multiplier Interfaz

Desde PicoBlaze no contiene un hardware multiplier, la multiplicacin est hecha por una rutina de
software, mult_sof t. Utiliza un cambio-y-aadir algoritmo a iterate a travs del 8-mordi multiplier y
requiere sobre 60 instrucciones en el escenario de caso peor. Un alternative es para utilizar el Spartan -3
dispositivo est construido-en combinational multiplier.
Desde PicoBlaze proporciona ningn mecanismo para utilizar un coprocesador, el multiplier tiene
que ser configurado como un yo/O perifrico. Podemos crear un 8 -mordi combinational multiplier que
tomat wo operandos de 8 bits y regresa un producto de 16 bits. Para facilitar este perifrico, el PicoBlaze
la interfaz requiere dos produccin adicional puertos y buffers para los dos operandos y dos entrada
adicional puertos para el producto de 16 bits. La rutina de asamblea ahora only necesidades de pasar los
operandos a los puertos de produccin y entonces recuperar los resultados de los puertos de entrada. El
cdigo acontece
; Definiciones de puerto de la entrada

C onstant e mult_prodO_puerto , 03
C onstant e mult_prodl_puerto , 04

; producto de multiplicacin 8 LSBs


; m u l t i p l i c e n i o n p r o d u c t o 8 MSBs ;

definiciones de puerto de la produccin

C onstant e mult_src0puerto , 05
C onstant e mult_srcl_puerto , 06

; multiplier operando 0
; multiplier operando 1

mult_Duro:

Produccin

s3,

mult_src0produccin de puerto
s4, mult_srcl_entrada de puerto
s5, mult_prodl_port entrada s6,
mult_prod0regreso de puerto

Nota que el combinational multiplier puede completar la computacin con una instruccin (i.e., dos ciclos
de reloj), y por ello ningn adicional cronometrando el mecanismo est necesitado en el cdigo. Esta
rutina puede ser utilizada en sitio del anterior mult_sof t rutina.

435

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA

sna

HyperTerminal
1 Hie Edita Vista
|QEj 03

OS

Llamada T
ransfer
Iff

Ayuda

rc *
SQ> c
SQ> d

000000
001000
010000
011000
100000
101000
110000
111000
SQ> Un
SQ> b
SQ> d

000000
001000
010000
011000
100000
101000
110000
111000
SQ> e
Error

00
00
00
00
00
00
00
00

00
00
00
00
00
00
00
00

00
00
00
00
00
00
00
00

00
00
00
00
00
00
00
00

00
00
81
00
00
00
00
00

00
00
81
00
00
00
00
00

00
00
81
00
00
00
00
00

00
00
81
00
00
00
00
00

00
00
00
00
00
00
00
00

19
00
00
00
00
00
00
00

00
00
00
00
00
00
00
00

10
00
00
00
00
00
00
00

00
00
81
00
00
00
00
00

05
00
81
00
00
00
00
00

00
00
92
00
00
00
00
00

04
29
84
00
00
00
00
00

Bl
-

SQ> _
<
[Conectado 0:01:10

>
El coche
detecta

Figura 17.8 consola

17.5.2

19200 8 N 1

Representativa pantalla.

UART Interfaz

Con el UART interfaz, la informacin puede ser introducida y mostrada en Ventanas HyperTerminal, el
cual es ms flexible y verstil que cambios y LEDs. Lo utilizamos como consola de control sencillo para
la rutina cuadrada. Una pantalla representativa est mostrada en Figure 17.8. La consola genera un SQ>
puntual y un usuario puede respond con un lowercase un, b, c, o d carcter. El un y b los caracteres suelen
valores de entrada para un y b de la rutina cuadrada. Cundo la llave est pulsada, el valor del cambio de
8 bits est ledo y almacenado a la ubicacin de RAM de dato correspondiente. El c el carcter suele aclarar
la RAM de dato y reinitialize el programa. Su funcin es idntica a aquello del c botn. El d ventajas de
carcter a un vertedero de RAM del dato, en el cual los 64 bytes del datuna RAM est mostrada en
pantalla. Esto nos deja para observar los varios valores de la rutina cuadrada y el cuatro siete -segmento
patrones DIRIGIDOS. Un mensaje de Error est regresado para todos otros caracteres.
El UART el mdulo diseado en Seccin 8.4 puede ser utilizado para este purpose. Desde la
transmisin y recibiendo FIFO buffers proporcionar un almacenamiento y flagging mecanismo, ningn
circuito adicional est necesitado. Necesitamos slo expandir la descodificacin y multiplexing circui tos
para acomodar el adicional yo/O puertos. El UART interfaz block el esquema es sketched en Figura 17.9,
en el cual el otro yo/O los perifricos estn omitidos para reducir clutter. PicoBlaze puerto de produccin,
fuera de_puerto, est conectado a w_dato de UART. El decoded habilita la seal est conectada a wr_uart,
y el dato est escrito a UART transmitting FIFO cundo est afirmado. De modo parecido, r.Dato de UART
es routed a PicoBlaze entrada multiplexing circuito,

}}}}}}}}}}}}}}}}}}}}}}

Figura 17.9 UART yo/O interfaz.

Y el decoded la seal clara est conectada a rd_uart. Cundo el UART recibiendo FIFO el puerto est
especificado en una instruccin de entrada, el recibiendo FIFO la produccin es routed a PicoBlaze
puerto de entrada, en_puerto, y el decoded saca la seal est afirmada un reloj cycle para sacar una palabra
del recibiendo FIFO. El UART la interfaz tambin necesita a ruta las dos seales de estado, rx_vaco y
tx_lleno, a PicoBlaze entrada multiplexing circuito. Las necesidades de programa de la asamblea para
comprobar el estado antes de lectura o escribiendo el UART's FIFOs. Desde las seales son slo 2 bits
ancho, pueden ser grouped con el anterior s y c botones en el mismo puerto de entrada.

17.5.3

Desarrollo de cdigo de la asamblea

Desde el cdigo de asamblea anterior est desarrollado en una moda modular, podemos expandir el
programa por aadir una rutina, proc_uart, para procesar UART transacciones. El programa principal
acontece
Llamada init

; inicializacin

forever:
; Cuerpo de bucle principal
L l a m a d a proc_btn

;botones & de proceso del control

L l a m a d a proc_uart

; proceso & de control uart rx

P l a z a de llamada

; calcula cuadrado

C a r g a de llamada_dirigi_pttn ; t ie nd a pa tr ones dir ig id os a car nero


L l a ma d a disp_dirigi

; produccin patrn dirigido

Salto f o r e v e r

Debido a la complejidad de la operacin de consola requerida, el proc_uart es bastante implicado. El


pseudo el cdigo de esta rutina es
Si (ningn carcter en UART recibiendo FIFO) entonces
regreso
Caracteres de entrada de FIFO si (los caracteres es un)
entonces valor de cambio de la entrada lo almacena a
exhibicin de carnero del dato regreso puntual
Si (los caracteres es b) entonces

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA

Valor de cambio de la entrada

Lo almacena a carnero de dato

La exhibicin puntual

Regreso

437

; Si (los caracteres es c) entonces


;

acta inicializacin

Regreso

; Si (los caracteres es d) entonces


;

carnero de dato del

vertedero
;

Regreso

; Mensaje de error de la exhibicin


; regreso

Seguimos la aproximacin de desarrollo modular y ms all dividir esta rutina a rutinas


ms sencillas. Una rutina de nivel bajo clave es tx_un-byte, el cual transmite 1 byte va el UART
puerto. Su cdigo es
; Definiciones de puerto de la
entrada
c o n s t a n t e s r d_ pu ert od e

b an de ra, 0 0
; 4 banderas (xxxxtrsc):
; t: uart tx Lleno , r: uart rx no vaco
; s: s bandera de botn , c: c bandera de botn
;definiciones de puerto de la produccin
C o n s t a n t e u art _t x_ pue rt o , 04 ; u a r t p u e r t o d e a u r i c u l a r
; alias de registro
n a m e r e g sd , t x_ da to

t x_ Un byt e :
E n t r a d a s 6 , rd _p rue ba de pu er to
d e l a b a n d e r a s6 , 08
s a l t o n z , t x_ un apr od uc ci n
d e b y t e tx_ da to, u ar t.t x

; dato para ser tx por uart


; Control uart-tx-lleno ;s , contina
e s p e r a r p u er to ; n o , e s c r i b e a u a r t t x
fifo

Regreso

Desde PicoBlaze velocidad de procesamiento es mucho ms alto que el UART velocidad de transmisin,
tenemos que impedir buffer desbordamiento. La rutina contina comprobar el estado del transmitiendo
FIFO buffer, y escribe dato slo cundo el buffer no es lleno.
La tarea de verter RAM de dato requiere el ms trabajo. Muestra la direccin de RAM del dato y
contenidos como un 8-por-8 mesa, el cual lista la direccin de byte primero y entonces los 8 bytes de dato
en formato hexadecimal, tan dentro
0 01 00 0 0 0 DE 00 0 9 0 0 04 0 0 03
0 10 00 0 0 0 00 FF I D 0 0 00 0 0 19
1 11 00 0 0 0 00 00 0 0 0 0 FF F F FF
La rutina consiste de tres rutinas importantes: disp_carnero_addr, el cual enva ASCII cdigos para mostrar
la direccin base de 5 bits en binary formato; disp_datode carnero, el cual enva ASCII cdigos para
mostrar 8 bytes de dato; y hex_a_ascii, el cual convierte un dgito hexadecimal al correspondiente ASCII
cdigo.
El cdigo completo est mostrado en Listado 17.3. Incluye comentarios detallados para explicar
operacin de las subrutinas. El unmodified subrutinas de Listado 17.1 est omitido.

438 PICOBLAZE yo/O INTERFAZ


Listado 17.3 programa Cuadrado con un UART consola
Circuito cuadrado con UART y multiplier interfaz
Operacin de programa :
Ledo un y b de cambio
Calcular un*un + b*b
Dato de exhibicin en HyperTerminal y 7seg dirigi

io

; Constantes de dato
; Seleccionado ASCII cdigos
Constante
Constante

A S C I I -0 ,
A S C I I _1 ,

30
31

i5 constante

A S C I I _2 ,

32

Constante

ASCII -3 ,

33

Constante

61

Constante

ASCII _Un
,
ASCII _b ,

Constante

ASCII _c ,

63

:o
Constante
Constante

ASCII _d ,

64
6F

ASCII -O ,

_r

Constante

ASCII

Constante

ASCII _E ,

Constante

ASCII _S

25 c o n s t a n t e

62

ASCII

45
53

_Q

72

51

Constante

ASCII _D_U,44

Constante

ASCII _GT

Constante

ASCII _SP

Constante

ASCII _CR
,
ASCII _LF
,

A constante

3
E
20
0
D
0
U
n

uppercase D
>
Espacial
Lnea de retorno
de carro alimenta

Alias de direccin de RAM de dato


35 c o n s t a n t e
Constante

Un_lsb
,b _ l s b ,

00
02

Constante

aa_lsb

, 04

Constante

aa_msb , 05

Constante

bb_lsb

* Constante

, 06

bb_msb , 07

Constante

aabb_lsb ,

08

Constante

aabb_msb ,

09

Constante

aabb_cout ,

Constante

ledO ,

10

0U
n

ledl ,

11

45 c o n s t a n t e
Constante
Constante

A s q ue

D i r i g i d 12
o2 ,
Dirigid 13
o3 ,

; alias de registro
Generalmente variables locales
utilizadas

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA 439

namereg Tan , dato


namereg si , addr
55 n a m e r e g s 2 , i
;Variables

; reg Para dato provisional


; reg Para provisional mem

& i/o puerto addr

;ndicede bucle de propsito general

globales

namereg sc, cambio_un_b


namereg sd, tx_dato

Offset

de

carnero

para

Entrada de cambio

corriente ; dato para ser tx


por uart

6o ; - === -; Alias de puerto

; ------------------ Defin ic io nes d e pu erto de la en tra da

Constante rd_puertode bandera, 00


65 4 bander as (xxxxtrsc):
; t : uart tx fu 11
; r: uart rx no vaco
; s: s bandera de botn
; c: c bandera de botn
70 c o n s t a n t e s w _ p u e r t o ,

01

Constante uart_rx_puerto, 02
constante mult_prod0puerto, 03
constante mult_prodl_puerto, 04

;8 mordi cambios ;uart puerto de


auricular ; producto de
multiplicacin 8 LSBs ; producto de
multiplicacin 8 MSBs

Definiciones de puerto de la produccin

04
05

; 7seg
0
dirigi
; 7seg
1
dirigi
; 7seg
2
dirigi
; 7seg
3
dirigi
; uart Puerto de auricular
; multiplier
Operando 0

06

; multiplier

75 c o n s t a n t e

ssegO .Puerto ,

00

Constant
eC o n s t a n t
eC o n s t a n t
e onstant
C
T aen
c oCn os tnasnt taen t
e

ssegl

_Puerto ,

01

sseg2

.Puerto ,

02

sseg3

.Puerto ,

03

uart. tx.Puerto ,
mult_ srcO.Puerto
,
mult_ srcl.Puerto ,

Operando 1

El programa principal que llama jerarqua :


Principal

En l
tx -Puntual
tx.Uno.Byte

proc-btn

ini t

proc.uart
tx .Puntual

En l

proc.uart-err
tx.En e.Por t e
Vertedero-mem
tx .Puntual

disp-Carnero-addr

tx.Uno.Byte disp

.Carnero-dato
tx-Un-byte
Consigue-superior.nibble

440 PICOBLAZE yo/O INTERFAZ


Consigue-ms bajo.nibble
hex .A.ascii
Cuadrado

mult-Carga dura-

dirigido-pttn
Consigue- ms bajo-nibble
Consigue.Superior-nibble

hex-A-dirigido

disp -dirigido

Llamada

; Inicializacin

init forever :
; Cuerpo de bucle
principal ninguna

: Botones & de proceso del

llamada proc_btn
llamada proc.uart
Llama carga de
llamada

control : proceso & de control

cuadrada_dirigi_pttn

dirigido

uart rx ;calcula cuadrado :


tienda patrones dirigidos a
carnero ; produccin patrn

llamada disp_dirigi
salto forever

;Rutinario: init
; Funcin: acta inicializacin , carnero de registro claro

130

registro de produccin:
; Cambio-un -b : aclarado a 0 ; temp registro: dato, i

init :
135 ; memoria clar a

Carga i, 40
; unitize ndice de bucle a 64
Dato de carga, 00 clr_mem_bucle :
Dato de tienda, (i) mo sub i, 01 : d e c n d i c e d e b u c l e
Salto nz , clr_mem_bucle ; r e p i t e h a s t a i = 0 : c l a r o r e g e s t e r la
carga cambia_un_b, 00 llamada tx_incitarnos regresa

Rutinario: proc.uart
Funcin: ledo uart entrada char: un o b: ledo un o b de
cambio:
c: Claro; d: carnero/de dato de exhibicin de vertedero otro:
entrada de error reg: s3 (bandera de puerto de la entrada) temp
el registro utiliz: dato
s4: la tienda recibi uart char o 00 (ningn uart entrada)
proc.uart :

Prueba s3, 04 salto z,

; Control uart rx estado : va

uart.rx.Hecho

a hecho si rx vaco

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA 441

;El proceso recibi char '

entrada s4, uart_rx_puerto ;

;Consigue char es un

control si recibi char

; Control ASCII un ; no ,

comparar s4, ASCII_un salt o


nz, chk_ascii_b dato de
entrada, sw_dato de tienda
del puerto, un_lsb llamada
tx_salto puntual

control luego ; consigue


cambio ; escribir un a
carnero de dato ; lnea
puntual nueva

uart_rx_hecho chk_ascii_b:
;Control si recibi char

comparar s4, ASCII_b salto


nz, chk_ascii_c dato de
entrada, sw_dato de tienda
del puerto , b_lsb llama
tx_salto puntual

Es b

uart_rx_hecho chk_ascii_c :

puntual nueva

; Control ASCII b ; no ,
control luego ; consigue
cambio ; escribe b a
carnero de dato ; lnea

; Control si recibi char

comparar s4, ASCII_c salto


nz, chk_ascii_d llama init
salto uart_rx_hecho

Es c

chk_como c i i _d:

;ningn

;Control si recibi char

luego ; claro

comparar s4, ASCII_d salto


nz, ascii_undefined vert edero
de llamada_mem salto
uart_rx_hecho

; Control ASCII c
control

Es d
; Control ASCII d

ascii_undefined:
; undefined char

Llamada proc_uart_error
uart_rx_hecho : regreso

;Carnero de exhibicin
del vertedero

m ; Rutinario : proc.uart.Error
; Funcin: Error de exhibicin" para desconocido uart char

proc_uart_Error:
Carga tx_dato, ASCII_LF
200

205

2yo
0

Lla
mad
a
Lla
C
m aa rdg
aa
Lla
C
aa rdg
m
L
aa l a
mad
a
Lla
C aa rdg
m
aa
Lla
C
m aa rdg
aa
Lla
C aa rdg
m
aa

tx_Unbyte tx_dato,
ASCII_CR
tx_Unbyte tx_dato,
ASCII_SP
tx_Unbyte
tx_Unbyte tx_dato ,

transm i t

LF

;
Transmite

C
R

;
Transmite
;
Transmite

SP

;
Transmite

:
Transmite

;
Transmite

SP

ASCII_E
tx_Unbyte tx_dato ,
ASCII_r
tx_Unbyte tx_dato,
ASCII_r
tx_Unbyte

442

PICOBLAZE Yo/O INTERFAZ

Carga tx_dato, ASCII_o


Llamada tx_unbyte

Carga tx_dato, ASCII_r

; transmite o
215

llamada tx_unbyte
; transmite r

Llamada tx_regreso puntual

Rutinario: vertedero .mem


Funcin: cundo d recibi , vertedero

64 bytes de carnero cuando

001000 XXXXXXXXXXXXXXXX
010000 XX XX XX XX XX XX XX XX
111000 XX XX XX XX XX XX XX XX
temp el registro utiliz:
si: Bucle tan exterior ndice
s4: direccin base de
carnero
2.10 v e r t e d e r o _ m e m :
addr Utiliz como ndice de bucle

Carga s3,
00 buclede
vertedero:

Consigue base de carnero addr (xxxOOO)

; Carga de
cuerpo del bucle

s 4 , s 3 235 s l O s 4 s
10 s4 slO s4
Llamada
disp_carnero_addr llama
d i s p _ d a t o d e c a r n e r o 240
aade s3 , 01
Compara s3, 08 salto
nz, llamadade bucle
del vertedero
tx_regreso puntual

inc ndice de bucle


:El bucle no logra 8 an
as :nuevo puntual

Rutinario: tx-puntual
Funcin : genera puntual "SQ>"
: temp
Registro: tx.Dato
tx_Puntual:
Carga
Llamada
Carga
Llamada
Carga
Llamada
Carga
Llamada
Carga
Llamada
Carga
Llamada

tx_Dato, ASCII_LF
tx_Unbyte

; Transmite LF

tx_Dato , ASCII_CR
tx_Unbyte

; Transmite CR

tx_Dato , ASCII_S
tx_Unbyte

; Transmite S

tx_Dato, ASCII_Q
tx_Unbyte
tx_Dato, ASCII_GT
tx_Unbyte

: Transmite

; Transmite >

tx_Dato, ASCII_SP
tx_Unbyte

Regreso

; Transmite SP

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA 443

; Rutinario: disp .Carnero -.addr

Carnero addr

; Funcin : exhibicin 6mordi


; bbbOOO '
270 ; registr o de entr ada:
: s4: direccin base : temp
registro :
: i, s7: mord mscara
275 d i s p _ c a r n e r o _ a d d r :
; Lnea nueva

Carga tx_dato, ASCII_LF


Llamada tx_unbyte
Carga tx_dato, ASCII_CR
280 l l a m a d a t x _ u n b y t e
Carga tx_dato, ASCII_SP
Llamada tx_unbyte
Llamada tx_unbyte

: Transmite LF
; Transmite CR
; Transmite SP
; Transmite SP

; initialize El ndice de bucle y mscara


285 carga i, 06

:addr Utiliz como ndice de bucle

Carga s7, 20

;Mscara de conjunto a 0010.0000

tx_Bucle:
Cuerpo de bucle

Carga tx_dato, ASCII_1


290 p r u e b a s 7 , s 4

Salto nz , tx_01
Carga tx_dato, ASCII_0;

: Carga default ASCII yo


; Control el mordi
; El bit es yo
; El bit es 0, carga ASCII 0

tx_01 :

Llamada tx_unbyte
295 ; n d i c e d e b u c l e d e l a
actualizacin y
srO s7
sub i, 01
Salto nz, tx_bucle

: Transmitir el ASCII yo o 0
Mscara
; Mscara de cambio b i t
: dec ndice de bucle
;El bucle no logra 0 an as

; Hecho con bucle, enva ASCII espacio


300 c a r g a t x _ d a t o , A S C I I _ S P
Llamada tx_unbyte

; Carga ASCII SP
: Transmite SP

Regreso
305 : r u t i n a r i o : d i s p . C a r n e r o . D a t o
; Funcin : 8dato de byte en forma de
: 00 II 22 33 44 55 66

77 88

; Registro de entrada:
; s4: direccin base de carnero
310 ; t e m p r e g i s t r o : i , a d d r ,

(xxxOOO)
Dato

disp_Datode carnero:
; initialize El ndice de bucle y mscara

Carga i, 08
315 d _ b u c l e d e c a r n e r o :
; Cuerpo de bucle

Carga addr, s4

; addr Utiliz como ndice de bucle

444

PICOBLAZE Yo/O INTERFAZ

A a d e a dd r , i
s u b ad dr , 01

: Calcula addr offset

; enva superior nibble

3:11

f e t c h Da to , ( ad d r)
La llamada
c on si gue _s upe ri or _ni bb le
L l a m a d a he x_ a_ asc ii
C a r g a tx _da to , d at o
1:5 l l a m a d a tx _u nby te

;Convierte a ascii

;Enva ms bajo nibble

f e t c h Da to , ( ad dr)
L a l l a m a d a co ns ig ue_ m s
b
Laj
l a a_
m anib
d a bl
heex_ a_ asc ii
330 c a r g a tx_ da to , d at o
L l a m a d a tx _u nb yte

; Convierte a ascii

;Enviar un espacio

C a r g a tx _da to , A SC II _SP ;
L l a m a d a tx _u nb yte
335 s u b i , 01
S a l t o n z , d_ bu cl ede c ar ner o
Regreso

; Transmite SP
; dec ndice de bucle
;El bucle no logra 0 an as

mu ; Rutinario : hex .A .ascii


; Funcin: convertir un hex

Nmero a ascii cdigo

: Aade 30 para 0

9, aade 37 para UnF

: Registro de entrada: dato


345

h ex_ a_ asc ii :

C o m p a r a d ato , 0 un
S a l t o c , a a de_ 30
A a d e d at o , 07
A a de _30 :
35(1 a a d e da to , 3 0
Regreso

; rout ine : tx
355 ,

;0 a 9, de s e t 30
: Un a f, extra de s e t 07

.U n o . B y t e

funcin: espera hasta uart tx fifo no lleno :


; Entonces wr i te un

Byte a fifo

; Registro de entrada: tx.Dato


: temp Registro :
: s6: bandera de puerto ledo
,'60 ,

t x_ Un byt e:
E n t r a d a s6 , r d_p ue rt ode
b
P an
r u de
e bra
a s6 , 0 8
S a l t o n z , tx _u nb yte
3(,s p r o d u c c i n tx _d ato , uart .t x
Regreso

370 ;

: Control uart.tx.Lleno

; S , contina

Rutinario : cuadrado

funcin

: calcular

un*un

esperar

_ Pu er to : n o , e s c r i b e a u a r t t x f i f o

b*b

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA 445

Resultado/de dato almacenado en el carnero empez w/


SQJiASE-ADDR temp registro : s3 , s4, s5, s6, dato
Cuadrado:
375

380

385

; Calcular un*un

fetch s3, un_lsb


fetch s4, un_lsb
Llamada mult_duro
Tienda s6, aa_lsb

; Carga un

Tienda s5, aa_msb

;Tienda byte superior de un*un

;calcula b*b
fetch s3, b_lsb

; Carga b

; Carga un
; Calcular un*un
; Tienda byte ms bajo de un*un

fetch s4, b_lsb


Llamada mult_duro
Tienda s6, bb_lsb
Tienda s5, bb_msb

; Carga b
; Calcula b*b
;Tienda byte ms bajo de b*b
;Tienda byte superior de b*b

; Calcular un*un+b*b

390

395

400

fetch Dato, aa_lsb


Aade dato, s6
Dato de tienda, aabb_lsb
fetch Dato, aa.msb
addcy Dato, s5
Dato de tienda, aabb_msb
Dato de carga, 00
addcy Dato, 00
Dato de tienda, aabb.cout
Regreso

; Consigue byte ms bajo de un*un


;Aade byte ms bajo de un*un+b*b
;Tienda byte ms bajo de un*un+b*b
;Consigue byte superior de un*un
;Aade byte superior de un*un+b*b
;Tienda byte superior de un*un+b*b
; Dato claro , pero mantener llevar
; Conseguir llevar de anterior +
; La tienda lleva de un*un+b*b

; Rutinario : mult-duro
; Funcin: 8mordi unsigned la multiplicacin que utiliza
; Externo combinational multiplier ;
; Registro de entrada :
; s3 : multiplicand

405

; s4 : multiplier ; registro de
produccin :
; s5: byte superior de producto
; s6: byte ms bajo de producto

410

; temp Registro:
mult_Duro:

Produccin s3, mult_src0_


Produccin s4, mult.srcl.
Entrada s5, mult_prodl_
415

Entrada
regreso

s6,

Puerto
Puerto
Puerto

mult_prod0 Puerto

; El siguiente es igual como los listados anteriores

420

; proc.btn ,

carga-dirigido-pttn , disp.Dirigido
; hex-A-dirigido, consigue .Bajo er-nibble , conseguir-superior .nibble

446 PICOBLAZE yo/O INTERFAZ

17.5.4

HDL Desarrollo de cdigo

El circuito cuadrado nuevo aade un UART y un combinational multiplier a un yo/O interfaz. El anterior
es el mdulo hablado en Seccin 8.4, y el ltimo puede ser inferred del HDL * operador. La
descodificacin y multiplexing partes de HDL cdigo en Listado 17.2 puede ser expandido para
acomodar los dos perifricos nuevos. El completo HDL el cdigo est mostrado en Listado 17.4. El
detallado yo/O direccin de puerto assignment puede ser encontrado en la seccin de encabezamiento
de Listado 17.3.
Listado 17.4 PicoBla ze con UART cons ola y multiplier interfaz
Mdulo pico_uart (
Ante de cable de la entrada, reinicializaci n, cable de entrada [7:0] sw,
5

cable de entrada rx,

Cable de entrada [1:0] btn, cable de produccin tx, cable de produccin [3: 0] un ,
cable de produccin [7:0] sseg

10 );

/ / S e a l d e c l a r a t i o n / / KCPSM3/seales d e R O M c a b l e [ 9 : 0 ] d i r e c c i n ; e s c a b l e [ 1 7 : 0 ]
instruccin;
Cable [7:0] puerto_id, fuera de_puerto;
reg [7:0] en_puerto;
El cable escribe_strobe , ledo_strobe;
// Yo/O el puerto seala

20

produccin habilita reg [6:0] en_d;

// Cuatr o d igi t s ie te se gmento e xhibicin dirigida


reg [7:0] ds3_reg , ds2_reg , dsl_reg , ds0_reg;
// Dos pus hbuttons

25

reg btnc_f lag_reg , btns_f lag_reg ;

Cable btnc_bandera_luego, btns_bandera_luego;


El cable pone_btnc_bandera , puesto_btns_bandera , clr_btn_bandera;
// uart
Cable [7:0] rx.char;

JO

Cable rd.uart , rx_no_vaco , rx_vaco; cable

wr_uart, tx_lleno ;
// multiplier
reg [7:0] m_srcO_reg, m_srcl_reg; cable [15:0] prod;

35
//Cuerpo
/ / =============== ======= ======= ======== = =========== ====

// Yo/O mdulos
40

// =====================================================

disp_mux disp_Unidad
C.clk(clk), .R einicializaci n(reinicializaci n) ,
.En3(ds3_reg), .En2(ds2_reg), .ini(dsl_reg),

PROGRAMA CUADRADO CON Un COMBINATIONAL MULTIPLIER Y UART CONSOLA 447

. in O( dsO _r eg) , .U n(u n) , .s se g ( s se g)) ;


d eb oun ce bt nc _U nid ad
( .c lk (cl k) , . Re in ici al iz ac i n( rei ni cia li za ci n) , .s w( bt n [ 0] )
,
. db _N ive l( ), .d b_ tic k( Pu es to _b tnc _b and er a) );
d eb ou nce b tns _u ni dad
( .c lk (cl k) , . Re in ici al iz ac i n( rei ni cia li za ci n) ,
, sw (b tn[ l] ), as que . db _N ive l( ), . db _ti ck (
C on ju nto _b tns _f l ag )) ;
u ar t uar t_ Uni da d
( .A nt e(a nt e), . Re ini ci al iz ac i n(r ei nic ia li zac i n) ,
. rd _u art (r d.u ar t) ,
. wr .u art (w r.u ar t) , . rx (r x) ,
. w_ Da to( fu era d e_ pue rt o) , ,t x_ lle no (tx _l le no) ,

55

.rx_Vaco(rx.Vaco), .r_Dato(rx.cbar), .tx(tx));


// c o m b i n a t i o n a l m u l t i p l i e r Asigna prod = m_srcO_reg * m_srcl_reg;
n ==================== ==============================

/ / KCPSM Y ROM i n s t a n t i a t i o n 6 0 / /
==================================

k cp sm 3 p ro c_u ni da d
( .A nt e ( a nte ), . Rei ni ci al iz ac in (1 'bO ),
. Di re cci n (di re cc in ),
. In st ruc ci n( in st ruc ci n ), , pu ert o_ id( pu er to_ id ),
. Es cr ibe _s tro be (e scr ib e_ st ro be ), ,f uer a de _pu er to (f ue ra
d e_ pu ert o) , 65 . Le d o.s tr obe (L e do. st ro be ), . En_ pu ert o( en _pu er to ),
. In te rru mp e(1 'b O) , . In te rr um pe _ac k( )); u ar t.r on
r om _U nid ad
70
(I.c
//
n tlk
e r (cl
f a z k)
d e, p.r Di
o dre
u ccci
c i n
n (v es ti do de an unc io ),
//
. In st ruc ci n( in st ruc ci n )) ;
//
//
//
75

80

Fuera de
puerto

Puerto id:

0x00:
0x01 :

dsO
ds 1

//

0x02 :

ds2

//

0x03 :

ds3

//

0x04 :

uart-tx -fifo

//

0x05 :

m.srcO

//

0x06 :

m.src Yo

//

//
Registros
//
S i e m p r e @ ( p o s e d g e a nt e)

<= Fu
era

Si dsO_reg

H
C+

Empie za (en_ d [0])


Si

85

(en_d [1])
Si dsl_reg
90

(en_d [2])
Si ds2_reg

<= Fu _Puerto;
era
<= Fu _Puerto;
era

(en_d [3])
Si ds3_reg
95

(en_d [5])
Si m_srcO_reg
(en_d [6])
m_srcl_reg

<= Fu _Puerto ;
era
<=

Fuera
de_puerto

<=

Fuera
de_puerto

PICOBLAZE Yo/O INTERFAZ

Fin
// Circuito de desc odific acin para habilitar

100

sea les siempre @*


Si (escribe_strobe)
Caso (puerto_id [2 : 0])

105

3'bOOO
3'bOOl

en_d =
en_d =

3'bOlO

en_d =

3'bOll

en_d =

3'blOO

en_d =

3'blOl

en_d =

7 'bOOOOOOl
7 ;' b O O O O O l O
;
7 'bOOOOlOO
;
7 'bOOOlOOO
;
7 'bOOlOOOO
;
7 'bOlOOOOO
;
= 7'blOOOOO
O

default: en_d
endcase

110

Ms
en_d = 7'b0000000;
Asigna wr.uart = en_d [4];
115

120

125

//

Interfaz de entrada

//
//
//
//
//
//
//
//

Entrada Puerto id
0x00 Bandera
0x01 : Cambio
0x02 : uart.rx.fifo
0x03 : prod Byte ms bajo
0x04 : prod Byte superior

// Registr o de entrada (par a


banderas)
siempre SCposedge ante)
empie za

130

btnc_Bandera_luego
;

<=

btns_bandera_luego

btns_bandera_reg

(Puesto_btnc_band
era)
(clr_btn_Bandera)

<=
Fin

l'bl

o
r
H

btnc_Bandera_reg

1 'bl

1'bO

btnc_Bandera_reg;

A
b aa n
n dd ee rr aa __ ll u
u ee gg oo
A ss ii gg n
n aa b
b tt n
n cs __ b

(Puesto_btns_band
era)
(clr_btn_Bandera)

135

btns_Bandera_reg;
// Circuito de desc odific acin para s eales claras
Asigna clr_btn_la bandera = ley.strobe k k (Puerto_id [2:0]= = 3'bOOO)
140

asigna rd.uart = Ley.strobe k k (Puerto_id[2:0]==3'bO10);


// Entrada multiplex ing
Asigna rx_no_vaco = rx_vaco;
Siempre @*
Caso(puerto_id [2:0])

145

3'bOOO : en_puerto

{4'bO, tx_lleno,

rx_No_vaco

bt ns_ flag_reg

btnc_bandera_re
g>;

3'bOO

En_puer

sw ;

to

rx.char;

3'bOl

En_puer

prod [7:0] ;

to

3'b01

En_puer

to

NOTAS BIBLIOGRFICAS

i so

449

default: En _pu er to = pr od[ 15: 8] ;


endcase

endmodule

17.6

NOTAS BIBLIOGRFICAS

La informacin bibliogrfica bsica para este captulo es similar a aquello para Captulo 15. El descargado
kcpsm el archivo contiene un comprensible UART y ejemplo de diseo del temporizador. El Xilinx sitio
de Web tiene pginas para PicoBlaze Foro y PicoBlaze Recursos de Usuario, donde adiciona l
PicoBlaze los ejemplos son disponibles.

17.7
17.7.1

EXPERIMENTOS SUGERIDOS
Abajo-contador de frecuencia yo

Un contador de frecuencia baja cuidadoso est hablado en Seccin 6.3.5. Podemos tratar el contador de
periodo, circuito de divisin, y binary-a-BCD circuito de conversin como tres yo/O mdulos, y
reemplazar el superior-nivel FSM con PicoBlaze. Diseo el yo/O interfaz, derivar la asamblea y HDL
cdigos, compile y synthesize el circuito, y verificar su operacin.

17.7.2

Abajo-contador de frecuencia II

Podemos reducir el hardware del contador de frecuencia de Experimento 17.7.1 por reemplazar el circuito
de divisin y binary-a-BCD circuito de conversin con subrutinas de software. Redefinicin el yo/O
interfaz, derivar la asamblea y HDL cdigos, compile y synthesize el circuito, y verificar su operacin.

17.7.3

Coche-scaled abajo-contador de frecuencia

Un coche-scaled abajo-contador de frecuencia est hablado en Experimento 6.5.5. Podemos utilizar Pi coBlaze para actuar todo no-tiempo-funciones crticas. Redefinicin el circuito con PicoBlaze y hardware
externo mnimo. Derivar la asamblea y HDL cdigos, compile y synthesize el circuito, y verificar su
operacin.

17.7.4

Temporizador de reaccin bsica con un temporizador de software

El temporizador de reaccin est hablado en Experimento 6.5.6. Podemos redefinicin el circuito que
utiliza PicoBlaze. Una tarea del diseo es para mantener pista del elapsed intervalo de tiempo. Esto puede
ser hecho por un software que cuenta rutina. Recuerda que un 50 -MHz el reloj est utilizado en el
prototyping el tablero y cada instruccin toma dos ciclos de reloj. Podemos crear un bucle de contar para
grabar el nmero de las instrucciones ejecutadas y derivar el intervalo de tiempo consiguientemente. Desde
el interval es al menos en la gama de milisegundo, los registros mltiples estn necesitados para este
propsito. Diseo el yo/O interfaz, derivar la asamblea y HDL cdigos, compile y synthesize el circuito,
y verificar su operacin.

450 PICOBLAZE yo/O INTERFACE

17.7.5

Temporizador de reaccin bsica con un temporizador de hardware

Podemos repetir Experimento 17.7.4 con un customized temporizador de hardware. El temporizador


tendra que ser tratado como un yo/O perifrico. PicoBlaze Puede produccin una orden para aclarar,
inicio, o parar el temporizador, y puede entrada el counter contenido. Diseo el yo/O interfaz, derivar la
asamblea y HDL cdigos, compile y synthesize el circuito, y verificar su operacin.

17.7.6

Temporizador de reaccin realzada

Un temporizador de reaccin realzado mantiene pista de la ltima cuatro respuesta tiempo y el ms rpido
response tiempo, y muestra el dato en Ventanas HyperTerminal. Podemos disear una consola similar a
aquello de Seccin 17.5. Tendra que haber tres rdenes:
c: Aclara todos los datos
f: Exhibiciones la respuesta ms rpida
r: Exhibiciones el tiempo de las ltimas cuatro respuestas
Todos otros caracteres: error de exhibicin
Expandir el diseo en Experimento 17.7.4 o 17.7.5 para incluir esta caracterstica. Derivar la asamblea y
HDL cdigos, compile y synthesize el circuito, y verificar su operacin.

17.7.7

Ratn de pantalla pequea scribble circuito

Un ratn de pantalla pequea scribble el circuito est hablado en Experimento 13.7.10. Podemos utilizar
PicoBlaze para controlar las actividades del ratn y actualizar la memoria de vdeo consiguientemente.
Diseo el yo/O interfaz, derivar la asamblea y HDL cdigos, compile y synthesize el circuito, y verily su
operacin.

17.7.8

Ratn de pantalla llena scribble circuito

Un ratn de pantalla llena scribble el circuito est hablado en Experimento 13.7.11. Podemos utilizar
PicoBlaze para controlar las actividades del ratn y actualizar la memoria de vdeo consiguientemente.
Diseo el yo/O interfaz, derivar la asamblea y HDL cdigos, compile y synthesize el circuito, y verificar
su operacin.

17.7.9

Realzado rotating pancarta

Un VGA rotating circuito de pancarta est hablado en Experimento 14.6.1. En vez de un mensaje fijo,
podemos realzar este circuito por utilizar un keyboard para introducir el mensaje dinmicamente. Supone
que el mensaje buffer es 20 caracteres mucho tiempo y sus caracteres estn actualizados en un primer dentro- primero-fuera de moda. Redefinicin el circuito con PicoBlaze. Diseo el yo/O interfaz, derivar
la asamblea y HDL cdigos, compile y synthesize el circuito, y verificar su op eracin.

17.7.10

Pong Juego

El completo pong el juego est hablado en Seccin 14.4. Algunas funciones del diseo pueden ser
implementadas por PicoBlaze:
Control de nivel superior FSM
Superior-nivel dos-segundo temporizador y dcada de dos dgitos contador
El circuito que actualiza el paddle posicin, posicin de pelota, y velocidades de pelota en Listado
13.5

EXPERIMENTOS SUGERIDOS

451

Modificar el circuito original, diseo el yo/O interfaz, derivar la asamblea y HDL cdigos, compile y
synthesize el circuito, y verificar su operacin.

17.7.11

Editor de texto

Un UART la terminal est hablada en Experimento 14.6.5. Podemos utilizar PicoBlaze para obtener dato
y rdenes del UART y actualizar el enladrillar memoria consiguientemente. Diseo el yo/O interfaz, derive
la asamblea y HDL cdigos, compile y synthesize el circuito, y verificar su operacin.