Autor Tema: Condición no importa '-'  (Leído 6176 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Condición no importa '-'
« en: 17 de Octubre de 2008, 19:00:53 »
Hola

Estoy trabajando en un case de vhdl en orcad y quisiera que una condición de un case sea como sigue...

La entidad está descrita así:
Código: [Seleccionar]
entity decod_ins00 is
 port (
   enable, i11, i10, i9, i8, i7, i3, i0: in std_ulogic;
   nop,ret,retfie,movwf,clrw,clrf,subwf,decf,iorwf,andwf,xorwf: out std_ulogic;
   addwf,movf,comf,incf,decfsz,rrf,rlf,swapf,incfsz: out std_ulogic    
  );
end decod_ins00;


El código de process es:
Código: [Seleccionar]
   --addwf 10111xxx
   when "10111---" => nop<='0';ret<='0';retfie<='0';movwf<='0';clrw<='0'; .........

Las entradas son 10111xxx, donde las 'x' expresan que no importa si el valor es 0 ó 1, el caso when se debe cumplir. El símbolo '-' expresa no importa. Por ejemplo, si se tiene 10111000, los tres últimos ceros no deben importar y el when debe cumplirse.

Al hacer la simulación el programa no respeta el "no importa" de los '-', la condición when nunca se cumple.

¿Qué tengo que hacer para que orcad los considere como válidos, ya sea 0 ó 1?

Gracias

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Condición no importa '-'
« Respuesta #1 en: 17 de Octubre de 2008, 19:35:15 »
No dices quien es el que controla el CASE,así que suponiendo a "vector" controlando dicho case...

Código: VHDL
  1. case vector(7 downto 3) is
  2.  
  3. when "10111" => nop<='0';ret<='0';retfie<='0';movwf<='0';clrw<='0';

EDITO: Vale,ya creo saber quienes controlan el case. A ver si acierto con esta:

Código: VHDL
  1. case (enable & i11 & i10 & i9 & i8) is
  2.  
  3. when "10111" => nop<='0';ret<='0';retfie<='0';movwf<='0';clrw<='0';

Si no compilara, crea un vector de tamaño 5, le asignas la concatenación de las 5 entradas, y construyes el case con él:

Código: VHDL
  1. signal vector: std_ulogic_vector(4 downto 0);
  2.  
  3. vector <= (enable & i11 & i10 & i9 & i8);
  4.  
  5. case vector  is
  6.  
  7. when "10111" => nop<='0';ret<='0';retfie<='0';movwf<='0';clrw<='0';

En este último caso es importante hacer la asignación a "vector" en el ámbito concurrente y no dentro del process


« Última modificación: 18 de Octubre de 2008, 04:13:54 por Modulay »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Condición no importa '-'
« Respuesta #2 en: 18 de Octubre de 2008, 18:22:06 »
Gracias Modu, lo voy a probar.

Los que controlan el case son: enable, i11, i10, i9, i8, i7, i3, i0; pero en unos casos no importa el estado de i7, i3, i0.


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: Condición no importa '-'
« Respuesta #3 en: 19 de Octubre de 2008, 05:10:33 »
También puedes volcar las 8 entradas sobre un vector de tamaño 8 en el ámbito concurrente, y usar la primera manera que puse , dentro del process