- Área Científica de Computadores
Transcrição
- Área Científica de Computadores
Departamento de Engenharia Electrotécnica e de Computadores Instituto Superior Técnico Universidade Técnica de Lisboa Microprocessadores Notas sobre a utilização de Símbolos e Buses no Editor de Esquemáticos da Xilinx (Versão 1.0.0) João Paulo B. Carvalho Março de 2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa 1. INTRODUÇÃO Este texto destina-se a introduzir o uso de buses e símbolos no Xilinx Schematic Editor - ECS. O domínio destas duas “facilidades” do editor de esquemáticos é essencial quando se pretendem criar projectos complexos que envolvam o uso e transferência de vários bits em paralelo (bus), como é o caso do projecto de Datapaths ou de Unidades Lógicas e/ou Aritméticas. A abordagem adoptada é a da criação de um projecto (simples), que será demonstrado e ilustrado passo a passo. Serão igualmente mencionados certos cuidados a ter com o uso de buses e símbolos, de forma a que as ditas “facilidades” não se transformem em dificuldades ;o). O projecto a construir consiste simplesmente na interligação e controlo de 2 registos de 4 bits. O circuito tem como entradas: • Um bus de 4 bits de dados – IB; • Uma variável SRW que selecciona qual o registo onde deverá ser escrito o conteúdo do bus de dados; • Uma variável SRR, que selecciona o registo a ser lido. E como saída, um bus de 4 bits de dados – OB – que recebe o conteúdo do registo seleccionado por SRR. 2. DESENHO E UTILIZAÇÃO DE BUSES Um Bus (em Português, o termo adequado será Barramento), não é mais do que um conjunto de linhas associadas a um mesmo nome, e que normalmente são utilizadas para transferir informação representada por vários bits. No ECS, um bus tem que ter sempre um nome que respeite a seguinte convenção NomeBus(n:0), em que: • NomeBus é um nome à escolha (de preferência um que faça sentido); • (n:0) indica a dimensão do bus. Por exemplo, um bus de entrada de dados de 4 bits poderá ser nomeado DataIn(3:0). Um Bus distingue-se visualmente no editor de esquemas por ser representado por uma linha grossa. A cada linha de um Bus é usualmente atribuído um peso, e podemos referir-nos a uma determinada linha indicando o nome do bus e o respectivo peso. Por exemplo, o bus indicado anteriormente é constituído pelas linhas DataIn (3), DataIn (2), DataIn(1) e DataIn(0). Podemos igualmente aceder a um conjunto de linhas do bus: para aceder às 3 linhas de maior peso podemos por exemplo escrever DataIn(3:1). Como indicado acima, para o projecto que se pretende desenhar serão necessários pelo menos 2 buses de 4 bits: • IB(3:0), InputBus, que contém os dados de entrada; • OB(3:0), OutputBus, que conterá os dados de saída. No entanto, e devido a opções de projecto, poderão ser necessários mais. O primeiro passo para o desenho do esquemático (assumindo que já se criou um novo projecto e abriu o editor de esquemáticos, ver “Manual de Introdução ao Xilinx”, disponível na página da cadeira), é a selecção dos componentes a utilizar, devendo para isso seleccionar-se a ferramenta “Add Symbol” projecto. Símbolos e Buses em Xilinx , que abrirá uma janela com a biblioteca de componentes disponível para o seu 2 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa Este projecto necessita obviamente de 2 registos de 4 bits cada. Afim de procurar os registos disponíveis pode utilizar-se a janela “Categories”, onde se seleccionará a opção “Flip-Flop” (não nos podemos esquecer que um registo não é mais que um conjunto de Flip-Flops. Seleccione na janela de símbolos, o FD4RE, que é um registo de 4 bits com carregamento em paralelo e clear síncrono. Coloque dois FD4RE na área de desenho(chamemos-lhes A e B). Cada um desses registos tem 4 entradas de dados (DA3 a DA0, e DB3 a DB0) e 4 saídas (QA3 a QA0, e QB3 a QB0). As 4 entradas de dados deverão ser ligadas ao InputBus. 2.1. DESENHO E LIGAÇÃO DO BUS DE ENTRADA Para se desenhar um Bus, procede-se da seguinte forma: 1. Seleccionar a ferramenta “Add Wire” ; 2. Desenhar uma linha da froma usual (de preferência ao lado dos registos - ver figura); 3. Seleccionar a ferramenta “Add Net Name” ; 4. Dar um nome à linha na caixa “Name” da janela “Options”. Escolher o nome IB(3:0); 5. Clicar sobre a linha. Quando se dá a uma linha um nome cujo formato o ECS associa a um bus, cria-se automaticamente um bus cuja dimensão é indicada pelo nome. A espessura do desenho da linha é automaticamente aumentada para indicar um bus. Figura 1: Quando se associa a uma linha o nome de um bus, o ECS transforma-a automaticamente num bus De notar que a partir do momento em que um nome é definido, a utilização desse nome em duas linhas distintas faz com que as linhas fiquem ligadas entre si mesmo que tal não apareça desenhado. Para aceder a uma linha ou conjunto de linhas de um bus basta utlizar o nome correspondente. Por exemplo, para ligar a entrada D0 do registo A à linha 0 do bus IB, basta ligar uma linha a D0 e darlhe o nome IB(0). Mesmo que a linha não seja desenhada ligada a IB, a associação fica automaticamente feita. No entanto, e afim de facilitar a compreensão do esquema, é por vezes conveniente desenhar a ligação entre o bus e a linha. Isso pode ser feito utilizando a ferramenta “Add Bus Tap” Símbolos e Buses em Xilinx e dando, mais uma vez, o nome adequado à ligação. 3 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa Existe um outro modo de criação de bus taps. Neste modo, sempre que se cria uma linha entre um símbolo já existente na folha e um bus, o bus tap é criado automaticamente. Para criar a linha, após seleccionar a ferramenta “Add Wire” , deve-se garantir que a opção “Automatically add bus tap between bus and the wire" está activada. A partir deste momento podem-se fazer as ligações entre os simbolos e o bus, sendo o bus tap criado automaticamente. Neste modo não é possível ligar uma linha já existente a um bus. De notar que, após a criação da linha e correspondente bus tap, continua a ser necessário dar um nome adequado a essas linhas. Dado que IB é um bus de entrada de dados, deve-se ainda associar-lhe um terminal. O processo é semelhante ao utilizado para associar um terminal a uma linha simples: basta utilizar a ferramenta “Add I/O marker” . 2.2. DESENHO E LIGAÇÃO DO BUS DE SAÍDA Estando ligado o bus de entrada, tem que se criar e ligar o bus de saída. Para isso as 4 saídas de cada registo terão que ser combinadas de alguma forma antes de serem ligadas ao OutputBus, i.e., QA3 e QB3 deverão ser combinadas e ligadas a OB3, QA2 e QB2 deverão ser ligadas a OB2, e assim sucessivamente. Como os registos seleccionados não têm saídas de alta impedância (Tristate), as suas saída não podem ser ligadas directamente entre si pelo que terá que se utilizar outra solução. A solução adoptada para a junção da saída dos registos num único bus, foi a utilização de multiplexeres controlados pela variável SRR. Como os buses são de 4 bits, são à partida necessários 4 mux (um para cada bit do bus) com 1 variável de selecção (e consequentemente 2 entradas de dados). Assim cada mux receberá uma entrada do registo A e uma entrada do registo B, e terá uma saída ligada ao bus OB. Com esta configuração OB3 assumirá o valor de QA3 se SRR=0, e de QB3 se SRR=1. O mesmo acontecerá com as restantes linha de OB. Para a interligação entre RA, RB e o mux, podem utilizar-se linhas simples, mas é igualmente possível criar dois buses nas saídas de RA e RB e utilizá-los para efectuar a ligação. No caso em questão a utilização de buses adicionais não traz nenhum ganho em virtude de o mux estar colocado ao pé dos registos, mas faria todo o sentido se o mux estivesse num local mais afastado do projecto. Em termos de buses, o projecto fica concluído, mas ainda é necessário ligar todas as entradas de controlo e de enable dos componentes utilizados. De notar que a definição de terminais de entrada/saída nos buses tem especial relevância quando se quiser criar um símbolo a partir do projecto desenhado, o que será tratado na secção seguinte. Símbolos e Buses em Xilinx 4 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa 3. CRIAÇÃO E UTILIZAÇÃO DE SÍMBOLOS Esta secção dedica-se, tal como indica o título, à criação e utilização de símbolos no ECS. Um símbolo não é mais que uma “caixa preta” contendo um determinado circuito interno, do qual só se conhecem as suas interfaces com o exterior (e supostamente o seu comportamento). Apesar de tal normalmente passar despercebido, muitos dos componentes que já utilizaram em Xilinx, não são mais do que símbolos. É o caso do registo que estamos a utilizar neste projecto. Para se verificar o que está dentro da caixa negra que é o FD4RE, basta clicar com o botão direito do rato no registo, seleccionar a opção “Symbol”, e de seguida “Push into Symbol”. Após esta operação é aberta uma nova janela de desenho onde se podem ver os componentes do FD4RE (que neste caso são 4 FlipFlops) (Figura 2). Os benefícios da definição de símbolos e criação de níveis hierárquicos são óbvios. Assim, sempre que se está a desenvolver um projecto complexo, deve-se aproveitar esta facilidade. Afim de se exemplificar o processo de criação de símbolos, utilizemos o retornemos ao projecto que desenvolvemos na secção 1. Símbolos e Buses em Xilinx 5 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa Figura 2: Conteúdo do símbolo FD4RE Analizando as linhas existentes no símbolo FD4RE, verifica-se que todas as linhas de controlo e dados, quer sejam de entrada, quer sejam de saída, estão definidas como um terminal de entrada/saída: ; . Este é um ponto essencial para que se possa criar um símbolo de forma correcta, pois é a única forma de indicar ao Xilinx quais são as interfaces com o exterior para o símbolo que pretendemos criar. Assim, antes de criarmos um símbolo para o nosso projecto, é necessário definir como entradas todas as linhas de controlo, enable e relógio. Essas linhas são: • CE – Clock Enable dos registos. É a entrada que indica se o registo é ou não escrito com os valores D3 a D0 presentes nas suas entradas. O registo é escrito se CE estiver a High; • R – Reset, ou Clear dos registos. Limpa o registo, i.e., coloca todos os bits do registo a zero; • S0 – Select. Entrada de selecção dos muxs. A Low selecciona as entradas “0, e a High as entradas “1”; • E – Enable dos muxs. Tem que estar a High para que os muxs funcionem. As entradas S0 vão ter um controlo comum que corresponde à entrada externa SRR, que controla qual o registo de onde se querem retirar os dados a colocar em OB. Como tal basta ligar todos os sinais S0, e definir um terminal de entrada com o nome SRR. Os CE são igualmente entradas externas, estando relacionadas com a variável de controlo SRW, que define qual o registo onde se querem escrever os dados de IB. Visto que se quer sempre escrever ou num, ou noutro registo (e nunca nos 2 em simultâneo), e que quando SRW=0 se quer escrever em RA, e quando SRW=1 se quer escrever em RB, então CE B = SRW , e CE A = SRW . Basta assim adicionar um inversor e definir SRW como um terminal de entrada externo. Símbolos e Buses em Xilinx 6 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa Os Reset podem ou não ser entradas externas do projecto. Caso se pretenda que o utilizador possa limpar os registos directamente, então deverão ser definidas como entradas externas. Caso não se pretenda essa funcionalidade adicional, então poderão ser ligadas a GND de forma a que estejam sempre inactivas. De forma a que os muxs estejam permanentemente activos, os seus enables podem estar permanentement ligado a VCC. Estando o esquemático do projecto concluído, e com todos os terminais definidos, a criação de um Símbolo e do símbolo a ela associado é muito simples. Basta gravar o esquema, regressar ao Project Navigator, seleccionar o esquema na janela “Sources in Project”, e finalmente, seleccionar a opção “Create Schematic Symbol” na janela “Processes for Source”. Símbolos e Buses em Xilinx 7 Uke2005 Departamento de Engenharia Electrotécnica e de Computadores Microprocessadores Instituto Superior Técnico - Universidade Técnica de Lisboa Após a criação do símbolo aparece um na janela de processos. O símbolo fica automaticamente guardado na directoria do projecto. Para o utilizar, basta abrir um novo esquema, seleccionar a ferramenta “Add Symbol” , e na janela de símbolos seleccionar a directoria correspondente ao nosso projecto. O símbolo surgirá na janela de símbolos. De notar que devido ao facto de se terem definido previamente todas as entradas e saídas do circuito, os pinos do novo símbolo ficam automaticamente definidos, e que as interfaces dos buses são diferentes das interfaces das linhas de 1 bit e indicam a dimensão do bus. Se pretender alterar as entradas e saídas do símbolo que criou, seleccione-o com o botão direito do rato, escolha a opção “Symbol” e de seguida “Edit Symbol”. É lançada uma aplicação que permite alterar o símbolo lógico do componente seleccionado, nomeadamente a disposição das entradas e das saídas. Cuidado com a alteração das designações, pois estas podem causar alterações no funcionamento interno dos componentes. 4. SIMULAÇÃO DO PROJECTO REALIZADO A simulação do funcionamento do componente criado pode ser feita a nível do circuito interno do símbolo, ou a nível externo (i.e., utilizando o próprio símbolo). Para tal devem utilizar-se os métodos aprendidos no laboratório de Sistemas Digitais. Alternativamente recomenda-se a simulação recorrendo directamente ao ModelSim. Para tal devem igualmente criar-se as formas de onda de teste (ficheiro com extensão .tbw – ver manual de Introdução ao Editor de Esquemáticos da Xilinx), mas em vez da opção “Generate Expected Simulation Result”, deve escolher-se a opção “Simulate Behavoral Model”. Símbolos e Buses em Xilinx 8 Uke2005