Professional Documents
Culture Documents
//
CAPTULO 17
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
415
17.2
PUERTO de PRODUCCIN
0
1
1
1
1
17.2.1
0000
0
0
1
1
0
1
0
1
0001
0010
0100
1000
Interfaz de produccin
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:
PUERTO de ENTRADA
419
sampled Dato
essampled
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
Fuera de_puerto
Reinicializa
cin
Puerto_id
Instruccin
Ledo_strobe
wiite_strobe
Interrumpe
intemjpt_ack
Direccin
>
KCPSM3
En_puerto
Reinicializa
cin
Fuera de_puerto
Puerto_ld
Instruccin
Ledo.strobe
wnte_strobe
Interrumpe
intemipt_ack
Direccin
>
KCPSM3
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;
421
Siempre Q*
Si (ledo.strobe)
Caso (puerto_id [1:0])
2'bOO:
rv
4'bOOOl
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
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
; 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
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
proc_btn:
Prueba s3, 01
S a lt o z, c hk_ btns
Llamada init
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
17.4.3
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
en 7seg dirigi
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
n a m e r e g s i , addr
namereg s2, i
: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
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
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
Plaza de llamada
Calcula cuadrado
Carga de llamada_dirigi_pttn
Llamada disp_dirigi
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
; M e m o r i a clara
85 c a r g a i , 4 0
Dato de carga,
00 clr_mem_bucle :
Dato de tienda, (i) sub i,
0 1 9 o salto nz ,
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:
;
105
proc_btn
; Control c bandera de
Prueba s3, 01
s a lt o z, c hk_ btns
lla mada init
Sa lt o proc_btn_hecho
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
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
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:
m s b a j a addr , u n _ l s b
145
aade
nibble
addr , s 6
la llamada
consigue_superior_nibble
; Consigue ms bajo
addr
byte
ms
consigue
consigue
bajo
ms
bajo
nibble ; convierte a
patrn dirigido
nibble
consigue_ms baja_nibble
428
; No
dirigi_hecho aade
170 p r u e b a s 6 , 0 1
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
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
; 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
regreso
y dat o, DE regreso.
290
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
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
un_lsb
Calcular un*un
Tienda byte ms bajo de
mult_tienda
un*un
blanda s6 , aa_lsb
tienda s5, aa_msb
calcula
un*un
b*b
fetch
s3,
b_lsb
fetch s4 , b_lsb
Carga b carga b
Calcula b*b
f e t c h Dato,
aa_msb
addcy
s5
dato, d a t o
de tienda,
dato
de
carga
,
aabb_msb
00
aabb_cout
^ !
regreso
^ l o
i
dato, d a t o
de tienda,
00
addcy
; Rutinario
multiplier Utilizando
Igor lo hm
Registro de entrada :
:s 3 :
multiplicand
:
3
4
0
s4:
multiplier
Produccin
Registro
.? 5 :
; s 6
;
3
4
5
temp Registro: i
mult_Blando:
Carga s5, 00
Carga i,
08
Claro s5
mult_Bucle:
srO s4
3
5
0
Salto nc
Aade s5 ,
s3
Isb Es 0
Isb Es 1
Cambio_prod
sra s6
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
cable
de
// 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
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;
?
?
1 '
bl
1
'bO
1 'bl
1
'bO
434
endmodule
17.5
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
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
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
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,
}}}}}}}}}}}}}}}}}}}}}}
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
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
L l a m a d a proc_uart
P l a z a de llamada
; calcula cuadrado
Salto f o r e v e r
La exhibicin puntual
Regreso
437
acta inicializacin
Regreso
vertedero
;
Regreso
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
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.
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
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
globales
Offset
de
carnero
para
Entrada de cambio
01
Constante uart_rx_puerto, 02
constante mult_prod0puerto, 03
constante mult_prodl_puerto, 04
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
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
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
llamada proc_btn
llamada proc.uart
Llama carga de
llamada
cuadrada_dirigi_pttn
dirigido
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 :
uart.rx.Hecho
a hecho si rx vaco
;Consigue char es un
; Control ASCII un ; no ,
uart_rx_hecho chk_ascii_b:
;Control si recibi char
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
Es c
chk_como c i i _d:
;ningn
luego ; claro
; 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
; transmite o
215
llamada tx_unbyte
; transmite r
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:
; 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
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
Carnero addr
: Transmite LF
; Transmite CR
; Transmite SP
; Transmite SP
Carga s7, 20
tx_Bucle:
Cuerpo de bucle
Salto nz , tx_01
Carga tx_dato, 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
; 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
444
A a d e a dd r , i
s u b ad dr , 01
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
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
: Aade 30 para 0
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
Byte a fifo
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
380
385
; Calcular un*un
; Carga un
;calcula b*b
fetch s3, b_lsb
; Carga b
; Carga un
; Calcular un*un
; Tienda byte ms bajo de un*un
; 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
; 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:
Entrada
regreso
s6,
Puerto
Puerto
Puerto
mult_prod0 Puerto
420
; proc.btn ,
carga-dirigido-pttn , disp.Dirigido
; hex-A-dirigido, consigue .Bajo er-nibble , conseguir-superior .nibble
17.5.4
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 [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
25
JO
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),
55
/ / 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+
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
Fin
// Circuito de desc odific acin para habilitar
100
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
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
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
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
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
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.
17.7.5
17.7.6
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
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
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
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.