Compartilhamento de lição de casa do curso "Tecnologia e Aplicação FPGA" (Instrument College, Hefei University of Technology)

Ensino no Departamento de Medição e Controle da Universidade de Tecnologia de Hebei

dever de casa um

1. Descreva resumidamente o processo de desenvolvimento da tecnologia EDA. Descreva resumidamente o que é a tecnologia EDA.

A tecnologia EDA (Electronic Design Automation) é uma ferramenta de software para o design e fabricação de produtos eletrônicos. O processo de desenvolvimento da tecnologia EDA:

  • 1960: A primeira geração de ferramentas EDA foi desenvolvida para projeto e simulação de circuitos.
  • Década de 1970: Ferramentas EDA desenvolvidas para a segunda geração, que suportam fiação automática bidimensional e melhoram a eficiência do projeto de circuitos.
  • Década de 1980: As ferramentas EDA entraram na terceira geração, suportando visualizações de modelos 3D e fornecendo um método de projeto mais intuitivo.
  • Década de 1990: Ferramentas EDA desenvolvidas para a quarta geração, suportando a automação do projeto e realizando o gerenciamento integrado do processo de projeto.
  • Anos 2000: as ferramentas EDA entraram na quinta geração, suportando simulação e projeto de circuito integrado em grande escala e melhorando ainda mais a eficiência do projeto.
  • Década de 2010: Ferramentas EDA desenvolvidas para a sexta geração, suportando design inteligente e realizando design de circuito mais rápido e preciso.

Após décadas de desenvolvimento, a tecnologia EDA tornou-se uma ferramenta necessária para o projeto e fabricação de produtos eletrônicos, fornecendo suporte para a fabricação eficiente e pesquisa e desenvolvimento de produtos eletrônicos.
Recomenda-se usar o PPT como padrão

2. Liste as semelhanças e diferenças entre as linguagens HDL e C.

As semelhanças e diferenças entre HDL e linguagem C são as seguintes:
Semelhanças:

  • Ambas são linguagens de programação usadas para descrever a execução de programas de computador.
  • Ambos suportam operações básicas, como escrever, compilar e executar programas.
  • Ambos têm regras gramaticais estritas que exigem que os programadores escrevam de acordo com as regras.

Diferenças :

  • HDL é uma linguagem de alto nível para projeto de sistemas eletrônicos, usada para descrever a operação lógica e o controle de tempo de sistemas eletrônicos. A linguagem C é uma linguagem de programação de uso geral usada para descrever o processo de execução de vários programas de computador.
  • O HDL suporta sintaxe relacionada ao design de hardware, como sinais, conexões, temporização, etc. A linguagem C suporta sintaxe de programação geral, como variáveis, operadores, loops, etc.
  • Os programas HDL geralmente são usados ​​no projeto e simulação de sistemas eletrônicos e, finalmente, geram circuitos de hardware por meio de síntese. Programas em linguagem C são geralmente usados ​​para escrever programas de computador e, finalmente, compilados para gerar arquivos executáveis.

3. Explique resumidamente as semelhanças e diferenças entre funções de compilação e síntese.

Compiladores e sintetizadores são duas ferramentas de software diferentes usadas para executar funções diferentes.

Um compilador é uma ferramenta de software usada para compilar um programa de linguagem de alto nível em uma linguagem-alvo, como a linguagem de máquina. Um compilador geralmente é usado para compilar um programa em linguagem de alto nível em um programa em linguagem de máquina e executá-lo em um computador.

Sintetizadores são ferramentas de software usadas para sintetizar modelos de design de sistemas eletrônicos em modelos de circuitos. Os sintetizadores são geralmente usados ​​para sintetizar modelos de design de sistemas eletrônicos em modelos de circuitos e arquivos de saída, como diagramas de circuitos e tabelas de fiação.

As semelhanças e diferenças entre compiladores e sintetizadores são as seguintes:

  • mesmo ponto:

    • Ambos são ferramentas de software para converter programas de linguagem de alto nível.
    • Ambos exigem que o escritor escreva de acordo com a sintaxe prescrita.
    • Ambos precisam ser compilados para gerar o resultado final.
  • diferença:

    • A entrada do compilador é um programa em linguagem de alto nível e a saída é um programa em linguagem de destino. A entrada do sintetizador é o modelo de projeto do sistema eletrônico e a saída é o modelo do circuito.
    • Compiladores são geralmente usados ​​para compilar programas de linguagem de alto nível, e sintetizadores são geralmente usados ​​para sintetizar projetos de sistemas eletrônicos.
    • O processo de compilação do compilador geralmente inclui apenas uma compilação, enquanto o processo de síntese do sintetizador geralmente inclui várias sínteses, incluindo várias etapas, como verificação de sintaxe, fiação e simulação.
    • A linguagem-alvo de um compilador geralmente é a linguagem de máquina, para execução em um computador. A saída de um sintetizador é geralmente um modelo de circuito, que é usado para gerar documentos como diagramas de circuitos e listas de fiação.

4. O que é síntese? Que tipos existem?

A síntese refere-se ao processo de conversão de um modelo de projeto de sistema eletrônico em um modelo de circuito usando ferramentas de automação de projeto eletrônico (EDA). A síntese inclui várias etapas, como verificação de sintaxe, fiação, simulação, etc.

Os tipos de síntese comuns são os seguintes:

  • Syntax Check Synthesis: É usado para verificar se a sintaxe do modelo de projeto do sistema eletrônico está correta e a mensagem de erro de saída.
  • Síntese de fiação: É usado para converter a operação lógica e a conexão de sinal no modelo de design do sistema eletrônico nas informações de fiação do circuito e arquivos de saída, como tabelas de fiação.
  • Síntese de simulação: É usado para simular o modelo de design do sistema eletrônico na operação do circuito e produzir as informações de tempo, forma de onda do sinal e outros dados do circuito.
  • Síntese de verificação: É usado para verificar se o modelo de projeto do sistema eletrônico atende às especificações e requisitos do projeto e gera relatórios de verificação e outros documentos.
  • Síntese de otimização de circuito: É usado para otimizar o modelo de design do sistema eletrônico para melhorar o desempenho, eficiência e confiabilidade do circuito.
  • Síntese de alocação de recursos: É usado para alocar recursos de hardware para operações lógicas, conexões de sinal, controle de tempo e outros recursos no modelo de design de sistema eletrônico para realizar a fiação automática de circuitos.
  • Síntese de relógio: usado para distribuir sinais de relógio para controle de tempo em modelos de projeto de sistema eletrônico para controlar a velocidade de operação e sincronização de circuitos.
  • Síntese de circuito integrado: é usado para integrar vários modelos de design de sistema eletrônico em circuitos integrados de grande escala e diagramas de circuito de saída, tabelas de fiação, relatórios de simulação e outros arquivos.
  • Síntese em nível de placa: usada para integrar vários circuitos integrados em placas de sistema eletrônico e esquemas de placa de saída,

5. Explique os dois conceitos de programação e configuração.

Na tecnologia Electronic Design Automation (EDA), programação e configuração são dois conceitos importantes.
Programação é o processo de escrever programas de computador em uma linguagem de programação. A programação é freqüentemente usada para descrever a execução de programas de computador e executar os programas escritos no computador.
A configuração refere-se ao processo de configuração de parâmetros, conexão de sinal, controle de tempo e outras operações em um sistema eletrônico ou circuito integrado para que ele possa operar de acordo com os requisitos do projeto. A configuração é frequentemente usada para converter um modelo de design de um sistema eletrônico ou circuito integrado em um circuito real que é executado em um dispositivo eletrônico.
A diferença entre programação e configuração é que a programação é descrever o processo de execução de programas de computador escrevendo programas, enquanto a configuração é realizar a configuração de parâmetros, conexão de sinal, controle de tempo e outras operações em sistemas eletrônicos ou circuitos integrados para que possam operar de acordo com os requisitos do projeto.

Recomenda-se consultar o conteúdo no PPT.

6. Quais fatores devem ser considerados no desenvolvimento de aplicações de FPGA e CPLD?

No desenvolvimento de aplicações de FPGA e CPLD, os seguintes fatores devem ser considerados:

  • Requisitos funcionais: É necessário considerar os requisitos funcionais da aplicação e selecionar o chip FPGA ou CPLD apropriado.
  • Recursos de hardware: É necessário considerar os recursos de hardware do chip FPGA ou CPLD para determinar o número de portas lógicas, capacidade de memória, portas de entrada e saída e outros parâmetros.
  • Ferramentas de software: É necessário considerar a linguagem de programação e o software de síntese de FPGA ou CPLD, e determinar a forma de escrever programas e sintetizar circuitos.
  • Desempenho do circuito: É necessário considerar o desempenho do circuito do FPGA ou CPLD, como frequência de operação, atraso na fiação, ruído do clock, etc.
  • Forma do pacote: É necessário considerar a forma do pacote do FPGA ou CPLD, e selecionar a forma do pacote apropriada para facilitar a conexão com outros circuitos.
  • Tecnologia de processo: É necessário considerar a tecnologia de processo do FPGA ou CPLD para determinar o fluxo do processo e os indicadores de desempenho do chip.
  • Suporte do fornecedor: É necessário considerar o suporte do fornecedor de FPGA ou CPLD e escolher um fornecedor profissional e confiável para garantir a qualidade e o suporte técnico do chip.
  • Custo-benefício: É necessário considerar o custo-benefício do FPGA ou CPLD, determinar o custo de compra e uso do chip, compará-lo com outros chips e escolher um chip com desempenho de custo mais alto.

lição de casa dois

1. Explique as semelhanças e diferenças entre o modo de porta INOUT e BUFFER.

Modo de porta INOUT e BUFFER são dois modos de porta em FPGA, e suas semelhanças e diferenças são as seguintes:

  • mesmo ponto:
    • Ambos INOUT e BUFFER são modos de porta no FPGA, que são usados ​​para definir as portas de entrada e saída do chip FPGA.
    • Ambos INOUT e BUFFER precisam especificar o nome, tipo e largura da porta para definir as portas de entrada e saída do chip FPGA.
    • Ambos INOUT e BUFFER podem ser conectados ao circuito externo do chip FPGA para realizar a interação do sinal entre o chip FPGA e o circuito externo.
  • diferença:
    • A porta INOUT é uma porta bidirecional e pode ser usada tanto como uma porta de entrada quanto como uma porta de saída. A diferença entre a porta BUFFER é que quando os dados precisam ser lidos, apenas o sinal de saída gerado internamente pode ser lido de volta, ou seja, feedback. Por exemplo, ao projetar um contador, o sinal de contagem de saída pode ser definido como BUFFER, para que o sinal de saída de releitura possa ser usado como o valor inicial do próximo valor de contagem.

2. Explique resumidamente como o GAL implementa circuitos combinacionais programáveis ​​e circuitos sequenciais.

Apenas para referência, com base em PPT,
GAL (Generic Array Logic) é um dispositivo lógico programável que pode ser usado para implementar circuitos combinacionais programáveis ​​e circuitos sequenciais.

O dispositivo GAL contém alguns blocos lógicos programáveis ​​e cada bloco lógico possui suas próprias portas de entrada e saída, que podem ser usadas para implementar operações lógicas básicas e controle de tempo. O dispositivo GAL também inclui alguns caminhos programáveis, que podem ser usados ​​para conectar diferentes blocos lógicos para realizar conexões de circuitos complexos e transmissão de sinal através de blocos lógicos.

A função programável do dispositivo GAL torna possível realizar uma variedade de diferentes funções de circuito, incluindo circuitos combinacionais programáveis ​​e circuitos sequenciais.

3. Qual é a diferença entre um caminho de interconexão local e um caminho de conexão direta em um dispositivo Cyclone?

Caminhos de interconexão local e caminhos de conexão direta em dispositivos Cyclone diferem das seguintes maneiras:

  • O caminho de interconexão local refere-se ao caminho dentro do dispositivo Cyclone, que pode realizar a transmissão do sinal no mesmo bloco lógico. Os caminhos de interconexão local são geralmente usados ​​para implementar operações lógicas básicas e controle de tempo.
  • O caminho de conexão direta refere-se ao caminho dentro do dispositivo Cyclone, que pode realizar a transmissão do sinal em diferentes blocos lógicos. Os caminhos de conexão direta são normalmente usados ​​para implementar conexões de circuitos complexos e transmissão de sinal através de blocos lógicos.
  • A faixa de transmissão do caminho de interconexão local é limitada ao mesmo bloco lógico, enquanto a faixa de transmissão do caminho de conexão direta pode abranger vários blocos lógicos.
  • A velocidade de transmissão do caminho de interconexão local é geralmente mais rápida e pode atender aos requisitos da maioria das aplicações, enquanto a velocidade de transmissão do caminho de conexão direta depende da qualidade e complexidade da fiação e geralmente não é tão rápida quanto a velocidade de transmissão do caminho de interconexão local.

4. Na expressão C<=A+B, os tipos de dados de A, B e C são todos STD_LOGIC_VECTOR, a adição pode ser realizada diretamente? Explique a causa e a solução.

Na expressão C<=A+B, como os tipos de dados A, B e C são todos STD_LOGIC_VECTOR, a operação de adição não pode ser executada diretamente.

O motivo é que os dados do tipo STD_LOGIC_VECTOR não podem ser submetidos diretamente a operações aritméticas, devendo ser convertidos por meio de um método específico para realizar operações de adição.

Existem várias soluções possíveis:

  • Use a função de conversão de tipo para converter os dados do tipo STD_LOGIC_VECTOR em dados do tipo inteiro e, em seguida, execute a operação de adição.
  • Use a função de conversão de tipo para converter os dados do tipo STD_LOGIC_VECTOR nos dados do tipo de número de ponto flutuante de precisão dupla e, em seguida, execute a operação de adição.
  • Use as funções aritméticas integradas do VHDL, como funções assinadas e não assinadas, para converter os dados do tipo STD_LOGIC_VECTOR em um tipo de dados que pode executar operações de adição e, em seguida, realizar operações de adição.
  • Use os operadores aritméticos integrados do VHDL, como os operadores SLL e SRL, para converter dados do tipo STD_LOGIC_VECTOR em um tipo de dados que pode ser adicionado e, em seguida, execute a adição.

5. Programação VHDL.
A figura à direita mostra um multiplexador 4 para 1, e o programa VHDL deste circuito é escrito em duas expressões, instrução CASE e IF-ELSE. O tipo de dados dos sinais s1 e s0 selecionados para controle é STD_LOGIC_VECTOR; quando s1='0', s0='0'; s1='0', s0='1'; s1='1', s0='0' e s1='1', s0='1' executam y<=a, y<=b, y<=c, y<=d respectivamente.

insira a descrição da imagem aqui

library ieee;
use ieee.std_logic_1164.all;

entity Multiplexer is
port (
s1, s0: in std_logic_vector(1 downto 0);
a, b, c, d: in std_logic;
y: out std_logic
);
end entity;

architecture Behavioral of Multiplexer is
begin


process (s1, s0)
-- 在这里实现下面的Process,也就是下面的CASE语句或者IF-ELSE语句
.....
end process;


end architecture;

O programa VHDL para este circuito usando a instrução CASE é o seguinte:

process (s1, s0)
begin
case (s1 & s0) is
when "00" => y <= a;
when "01" => y <= b;
when "10" => y <= c;
when "11" => y <= d;
when others => null;
end case;
end process;

O programa VHDL para este circuito usando a instrução IF-ELSE é o seguinte:

process (s1, s0)
begin
if (s1 = '0' and s0 = '0') then
y <= a;
elsif (s1 = '0' and s0 = '1') then
y <= b;
elsif (s1 = '1' and s0 = '0') then
y <= c;
elsif (s1 = '1' and s0 = '1') then
y <= d;
end if;
end process;

lição de casa 3

1. O que é delta? Qual é o uso de delta em VHDL?
δ é uma palavra-chave especial em VHDL, que representa uma unidade de tempo. Em VHDL, δ pode ser usado para definir a constante de tempo, que representa o intervalo de tempo de mudança de sinal, e é usado principalmente para descrever o atraso de transmissão de sinais em circuitos sequenciais e o intervalo de tempo especificado no controle de temporização.
Por exemplo, defina uma constante de tempo c1 com um valor de 10δ, o que significa que o intervalo de tempo da mudança de sinal é de 10 unidades de tempo.

constant c1 : time := 10δ;

Em VHDL, a utilidade de δ tem principalmente os seguintes pontos:

  • Define a constante de tempo, representando o intervalo de tempo entre as mudanças de sinal.
  • Defina uma variável de tipo de tempo, que representa o ponto no tempo quando o sinal muda.
  • Defina instruções de controle de tempo, que representam o atraso de tempo para executar instruções.
  • Use as funções incorporadas relacionadas ao tempo, como a função agora e a função de resolução, para obter as informações de tempo do sistema.

2. Escreva 3 declarações VHDL para julgar a borda de subida do sinal de clock clk no projeto de circuito seqüencial.

  • Use a função integrada do VHDL rise_edge:
if rising_edge(clk) then
	-- do something
end if;
  • Use a instrução "evento":
if clk'event and clk = '1' then
	-- do something
end if;
  • Use uma instrução "if" com a palavra-chave "clock":
if clk='1' and clock'event then
	-- do something
end if;
  • Use uma instrução "esperar":
wait on clk;
if rising_edge(clk) then
	-- do something
end if;

Esses três métodos de escrita podem ser usados ​​para avaliar a borda de subida do sinal de clock clk e executar uma ação na borda de subida. O método de seleção específico pode ser selecionado de acordo com cenários de aplicação específicos e preferências pessoais.
3. Tente escrever um pedaço de código VHDL para implementar um comparador sem sinal, e a largura dos vetores envolvidos na comparação é n+1.
insira a descrição da imagem aqui

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity UnsignedComparer is
generic (
n: positive
);
port (
a, b: in unsigned(n downto 0);
x1, x2, x3: in std_logic;
x: out std_logic
);
end entity;

architecture Behavioral of UnsignedComparer is
begin
process (a, b)
begin
if a > b then
x <= x1;
elsif a = b then
x <= x2;
else
x <= x3;
end if;
end process;
end architecture;

No modelo de comportamento dessa entidade, o operador de comparação construído em VHDL é usado para realizar a função de comparação de a e b. Especificamente, o operador "=" e os operadores "<" e ">" são usados ​​para julgar, respectivamente, e os resultados correspondentes são gerados de acordo com os resultados da comparação.

Este programa implementa um comparador sem sinal para comparar dois inteiros sem sinal de n+1 bits a e b. Quando a é maior que b, saída x1; quando a é igual a b, saída x2; quando a é menor que b, saída x3.
O programa primeiro declara os arquivos de biblioteca necessários, depois define uma entidade UnsignedComparer e define um parâmetro genérico n na entidade, indicando a largura do vetor envolvido na comparação. A entidade também define cinco portas, que são duas portas de entrada a e b, representando dois inteiros sem sinal a serem comparados; três portas de entrada x1, x2 e x3, representando respectivamente o valor de saída quando a é maior que b, igual a b e menor que b; uma porta de saída x, representando o resultado da comparação.
No modelo de comportamento, o programa define um processo e usa a instrução if para julgar as condições do processo e gera valores diferentes de acordo com os resultados da comparação.
Finalmente, no modelo estrutural, o programa combina o modelo comportamental com entidades para formar um comparador completo.





Este artigo é apenas para referência, por favor, julgue se a resposta está correta ou não, não plagie diretamente.

Acho que você gosta

Origin blog.csdn.net/kanhao100/article/details/128165602
Recomendado
Clasificación