Então pessoal a gente vai falar brevemente sobre linguagem descrição de hardware certo que é o que vocês vão utilizar aí para desenvolver os projetos da disciplina de vocês tanto a disciplina teórica ccos digitais também lá em laboratório de ccos digitais vocês vão utilizar as linguag Deão de hard para fazer os projetos de você de vocês então o que é uma linguagem Decão de hardware também chamado de HDL a sigla em inglês né hardware description language basicamente é uma linguagem textual como se fosse uma linguagem de programação só que diferente de uma linguagem de programação em
que você gera um programa que vai ser rodado em um computador a linguagem de descrição de hardware ela serve para descrever um circuito E no caso aqui vai ser um circuito digital então não confundam uma linguagem de programação com uma linguagem de descrição de hardware a linguagem de programação o resultado final é um programa que vai rodar num computador a linguagem de descrição de Harder o produto final é o circuito que inclusive você pode utilizar esse circuito para construir um computador para rodar um programa descrito por uma linguagem de programação certo então a linguagem deção
hard é o produto final é um hardware próprio nome tá dizendo então a gente nunca vai dizer que está programando por exemplo em vhdl ou programando e em verilog a gente vai dizer que a gente tá descrevendo em vhdl ou descrevendo em viloid são as duas principais linguagens de descrição de hardware e o circuito que você está sendo tá descrevendo aqui no HDL ele pode ser feito apenas para simulação certo você pode apenas fazer simulação de circuito usando ferramentas de simulação que a gente vai aprender na aula de hoje como você pode sintetizar Ou seja
você pode gerar aquele circuito e implementar ele no fpga ou no certo Professor o que é fpga e o que é c são conceitos que eu vou abordar um pouco melhor napl de labat mas de formaum fpga ou um C entendido como sendo um hardware no qual você descrever o que hardware vai fazer ou seja você consue dizer qual o circuito digital que vai ser implementado naquele hardware não se confundam pensando que isso é parecido por exemplo com um Arduíno da vida não é no Arduíno o hardware o circuito já está todo feito a única
coisa que você muda é o programa que o Arduino vai rodar aqui num fpga ou num cpld você cria todo o hardware o que você cria é o hardware não o software certo então a linguagem desse S hardw pode ser utilizada tanto para só fazer simulação que é o que o que eu vou cobrar aqui na disciplina teórica mas também pode ser utilizado para sintetizar um circuito num fpga ou no cpld e também serve não tá colocado aqui para você criar o seu próprio chip então por exemplo você vai criar Você tem uma ideia de
um novo processador ou de um novo chip que faz alguma função no celular então você pode descrever seu circuito usando uma linguagem deção de hardware e mandar para uma empresa específica para converter a linguagem Dee hardware que você descreveu e um chip aí você gera seu próprio chip você gera seu próprio circuito integrado certo também é possível fazer isso com HDL certo quando você tá em linguagem deção de hardware Existem duas linguagens mais comuns que é a v o vhdl certo que vem dessa sigla aqui ó o v de vhdl ele vem de outra sigla
que é de vhsc que é very High High Speed integrated circuit é circuitos integrados de muita alta velocidade e o HDL é de linguagem deção de hard certo Porém Aqui na disciplina a gente utiliza o verilog e o System verilog o verilog e o System verilog eles podem ser entendidos como se fossem a mesma coisa certo na realidade hoje o verilog é um subconjunto do System verilog o system verilog é mais amplo o verilog é um subconjunto do o System certo que o System vlog ela é um pouquinho mais fácil de trabalhar do que o
vlog então a gente utiliza aqui no nosso curso o verilog ou o System verilog e aqui pessoal é diferente das linguagens de programação por exemplo lá vocês tem Python C Java um monte de linguagem de programação e cada uma é digamos assim melhor para uma área então Ah se você vai pra parte de A por exemplo geralmente o pessoal gosta de usar Python se você vai pra parte de processamento escrever sistema operacional por exemplo ou escrever driver aí você vai ter que escrever em C ou c+ mais certo e sistema web vai ver que alguém
ainda usa Java né mas enfim eh Mas usa Usa Java ou ou PHP então é diferente das linguagens de programação que cada uma tem um propósito mais específico para uma área linguagem deção de hardware não tem isso todas as duas tanto vhdl como verilog System ver log a a priori elas servem paraa mesma coisa então tanto faz se você aprender uma você pega a outra em duas semanas certo então a gente utiliza aqui sistem verilog ou verilog porque por experiência própria os alunos aprendem melhor certo do que o vhdl Então dentro essas linguagens de hardware
as que se destaca que a gente vai abordar é o System verilog Então por que que a gente vai utilizar HDL ah professor eu vi que tem um programinha que a gente até ainda vai abordar aqui na disciplina que é o log sim que eu consigo fazer simulação de circuito por que que eu não utilizo log sim porque que log sim é um é um programa que é acadêmico se você sair desse portão para fora ninguém vai falar de logim certo logim é da porta da universidade para para dentro da porta da universidade para fora
é HDL certo então por que que ninguém vai falar de log Sim lá fora porque o log sim tem várias desvantagens e uma dessas desvantagens que na verdade foi o objetivo da criação do HDL é esse tópico aqui ó simplificação em relação à sua documentação Então como o as linguagens desse Sand hardware são linguagens textuais elas são mais fáceis de documentar do que por exemplo você utilizar log sim que você só utiliza diagrama de circuito certo então para documentar é muito mais fácil principalmente projeto muito grande só quem já trabalhou com um projeto muito grande
log sim sabe como Infernal fica aquilo certo fica muita coisa por cima de muita coisa você não entende mais o que tá acontecendo Diferentemente do que uma linguagem textual que tem no minimo comentários certo mas você também pode usar outras ferramentas como um dox da vida Outra vantagem do HDL é que a atualização dos projetos fica muito mais fácil de fazer Principalmente quando você tá na fpga porque a fpga ela tem a característica de ser reconfigurável então se você descrever um circuito na numa fpga e você quer mudar uma funcionalidade daquele circuito você você só
Red descreve novamente atualiza o seu código digamos assim e joga novamente para fpga certo Outra vantagem é que ela permite um projeto Em um nível mais alto de abstração a gente vai ver aqui na verdade não aqui na disciplina teórica na disciplina prática quem tá pagando vai ver isso aqui que o o verilog ele tem estruturas na verdade não só o verilog o vhdl também tem estruturas que são muito parecidas com uma estrutura de linguagem de programação então tem if tem Case tem for e assim por diante certo só que aqui a gente vai trabalhar
no nível mais baixo porque eu quero usar o HDL para reforçar os conceitos de circuitos redução no projeto redução no tempo de projeto testes e implementação certo isso aqui é bastante comum Principalmente quando você tá comparando com montagem de circuito na protoboard Então quem já montou circuito na protobord ou quem vai montar na disciplina prática vai ver que é muito chato montar circuito grande na protoboard é muito suscetivel a erro e demora muito para montar enquanto que fazer a mesma coisa usando uma linguagem deção de hard ou fpga é muito mais simples certo no final
das contas a vantagem de utilização do HDR é a facilidade de síntese de circuitos em uma fpga Qual é a desvantagem a desvantagem É que geralmente o hardware gerado que vai est lá na fpga ele é menos otimizado que um circuito que você constrói especificamente paraa aplicação a gente não vai entrar tanto em detalhe nesse tópico porque isso requer um pouco mais de de maturidade em circuitos digitais certo mas basta vocês entenderem que um circuito Ger no fpga usualmente ele é menos otimizado do que um circuito integrado que foi criado para aquele propósito certo al
ní de desempenho é feito ainda mane profissional ou eles fazem depende o que eles fazem fazem tem partes que já estão prontas aí eles não não fazem fpga e tem partes que eles fazem um fpga e depois cria o circuito integrado certo então a linguagem de descrição de hardw que a gente vai utilizar aqui é o System verilog certo e o que eu vou apresentar aqui é a estrutura básica do sistem verilog é tipo assim o mínimo o mínimo que tem que saber só que com esse mínimo vocês já são capazes de fazerem o primeiro
projeto então o primeira coisa que vocês tem que entender que todo circuito digital insiste em ver log é denominado de módulo certo então módulo e circuito é a mesma coisa do ponto de do System ver log e todo código em System ver log inicia com a palavra reservada module inserra com a palavra reservada end module certo então entre o módu e o end module é onde você tem a descrição do seu circuito certo outra característica do System V log é que ele é case sensitive ou seja palavras maiúscula e minúscula são diferenciadas pelo interpretador System
ver log certo isso é bom reforçar por quê Porque embora acho que todas as linguagens em programação que vocês já utilizaram já utilizaram é cas sensitive mas o vhdl que é outra linguagem de exão de hardware não é certo então todas as linguagens de programação vocês já utilizaram são cas sensit Mas tem uma linguagem deção de hard que é o vhdl que não é qu Sens Então é bom reforçar que o v Log em específico não é qu Sens espaços em brancos não são interpretados então você pode utilizá-los para fazer formatação de código e Diferentemente
do Python que você tem que dar as tabulações certinhas S log não tem isso você pode dar tabulação não dar tabulação Quem escolhe é você certo todos os comandos terminam em ponto e vírgula assim como você tem lá no C né vocês vão ver que muita coisa que tem aqui do System ver log é parecido com o que se tem no C inclusive os comentários né barra barra é comentário em única linha barra estrela é comentários em múltiplas linhas aí você fecha com estrela barra certo regra para identificadores identificadores é o nome que a gente
dá para tudo que você nomea no System ver log fica mais fácil assoar com c que é a linguagem que acho que vocês tem mais familiaridade então quando você vai nomear uma variável por exemplo de Paulo você tá nomeando a variável de Paulo Paulo é o que a gente de identificador certo Existem algumas regras para vocês escreverem os identificadores no System ver log ele deve Sempre iniciar com letra ou com underline e jamais deve iniciar com número certo só essa regrinha e lembrando ele é cas Sens então palavras maiúscula e minúsculo fazem diferença bem como
é a estrutura básica de um código System ver log primeiro inicia com a palavra reservada módu e você dá o nome do módulo que é o nome do seu circuito aí você abre parênteses e fecha parênteses aqui entre os parênteses você vai definir as portas do seu circuito Professor o que é porta porta é a comunicação do circuito com o mundo externo ou seja porta é entrada e saída certo tudo que for entrada tudo que for saída a gente chama de porta é a mesma coisa de pino certo daqui a pouco a gente vai declarar
vai explicar como é que você faz a declaração dessas portas a declaração da porta vai ficar entre os parênteses aqui eu tô quebrando as linhas mas não é obrigado você quebrar certo aqui eu tô quebrando porque eu acho que a formatação fica mais fácil depois que você fecha o parênteses e coloca o ponto e vírgula porque todo comando no System ver log tem que terminar com ponto e vírgula você vai colocar aqui o funcionamento do circuito efetivamente aqui você vai dizer como esse circuito funciona que a gente vai explicar hoje uma das formas de você
descrever o funcionamento do circuito só que o final você coloca end mod aqui tem um pequeno erro não precisa esse ponto e vírgula aqui no final não certo é só end mod é o único comando que não precisa do ponto e vírgula então bem aqui pra declaração das portas a primeira coisa que você vai colocar é o o tipo da porta o tipo da porta vai dizer se ela é entrada saída ou bidirecional bidirecional é que ela hora funciona como entrada ora funciona como saída vocês não vão trabalhar com bidirecional acho que aqui na disciplina
teórica em momento nenhum certo então ou vai ser entrada ou vai ser saída então ou vai ser input caso você quea queira ser entrada ou output caso você queira ser que seja saída certo depois do tipo da porta você coloca o tipo do dado o tipo do dado aqui no no System log ele tem uma característica que ele é uma linguagem que Embora tenha tipos assim como você tem lá no C que lá no C você tem um tipo inteiro FL char e assim por diante aqui oem também tem tipos Mas ela é uma linguagem
que ela não é tão fortemente tipada cer no final contas a gente só vai dá um tipo aqui na disciplina todinha todos os problemas são resolvidos com um tipo só mas o System very log ele tem o tipo bit o tipo Logic e o tipo TRE certo o tipo bit é caso esse dado só assuma dois valores possíveis ou nível lógico zero ou nível lógico 1 Só que geralmente o tipo que a gente utiliza é o tipo lógic porque ele é uma extensão do tipo bit além dos valores 0 e 1 ele também admite outros
dois valores que a gente vai ver entender a importância deles ao longo do curso que é o valor de Don't Care que é literalmente não importa e o valor Z que a gente chama de alta impedância certo então basicamente a gente vai utilizar pelo menos aqui na disciplina teórica 100% das situações a gente vai utilizar o tipo Logic certo tem o tipo TRE que ele é importante mas ele é mais importante e para algumas situações específicas certo o tipo TRE ele é quase como se fosse o tipo Logic A única diferença entre o tripo Tree
e o tipo Logic é o que o tipo Tree ele não admite o Don't Care ou seja ele só admite zero ou um ou alta impedância mas a diferença do tipo TRE pro tipo Logic é que o tipo tri Pode admitir múltiplos acionadores certo ou seja você pode ter múltiplas entradas entrando no tipo tri certo tá confuso Eu sei mas a questão é o seguinte eh vocês só vão utilizar o tipo tri se um dia vocês quiserem fazer barramentos barramento e dado barramento de endereço e assim por diante aí vocês vão precisar do tipo tri
A não ser que vocês queiram fazer isso vocês só vão utilizar o tipo Logic então aqui na disciplina a gente só utiliza o tipo lógic certo se um dia vocês quiserem fazer por exemplo uma memória que acessa um barramento de dados ou que puxa algo do barramento de endereços aí vocês TM que utilizar o tipo tri para fazer aquele aquele interfaceamento mas não se preocupem que vocês não vão precisar utilizar aqui na disciplina existem alguns tipos que eu tô chamando aqui tipos legados certo Por que que são tipos legados porque são tipos que foram definidos
inicialmente no verilog o system vilog é como se fosse a extensão do vlog tem alguns tipos que foram definidos no verilog que continuam no System mas recomendo não utilizar que é o tipo ha e o tipo Wi eu tô falando por qu porque eventualmente se vocês procurarem na internet Vocês ainda vão encontrar códigos que são códigos mais antigos que vão utilizar tipo reg e tipo War certo o tipo reg ele é basicamente um tipo Logic que apresenta capacidade de armazenamento porém ele não pode ser entrada já o tipo ar É um tipo Logic que ele
não apresenta capacidade de armazenamento porém ele pode ser tanto entrada como saída na realidade a diferença do tipo reg pro tipo ar é o seguinte e existe um um uma diretiva no no no verilog ou no System verilog que se chama diretiva o toda vida que você quer manipular dados dentro dessa diretiva always os dados T que ser tipo reg E toda vida que você quer manipular dados fora da diretiva always os dados tem que ser do tipo ar só que isso é uma confusão é UMS é um dos problemas graves do do verilog é
isso aqui certo e War isso foi resolvido justamente com tipo Logic certo então aqui na disciplina a gente só vai utilizar o tipo Logic novamente eu tô falando tipo reg tipo ar porque eventualmente vocês podem encontrar códigos assim certo algumas vezes pelo menos aqui no início do curso a gente não vai precisar vocês vão ter que declarar barramentos barramentos eles são vetores de bits ou seja um conjunto de bits ao invés de você declarar os bits individualmente você pode declar declarar os bits como se fosse um vetor certo A única diferença é que entre o
tipo de dado e o nome da porta você coloca um colchete e você coloca o bit mais significativo dois o bit menos significativo então por exemplo se você tiver fazendo a declaração desse tipo de porta aqui ó input quer dizer que é uma entrada do tipo lógico 3 2.0 a eu tô querendo dizer que essa porta a o bit mais é um vetor de bits o mais significativo é o TR o menos é o Zero Isso quer dizer que a tem quantos bits quatro né Bit 3 bit 2 bit 1 e bit 0 então são
4 bits Se eu quisesse declarar a como sendo 8 bits isso aqui teria que ser quanto sete então sempre a quantidade menos um certo e o o LSB sempre vai ser zero certo só que de início pelo menos para o primeiro projeto vocês não vão precisar utilizar isso aqui na verdade até podem mas não precisam o nome da porta é literalmente o nome do Pino certo Então nesse circuito aqui que a gente acabou de montar que é um circuito que tem entradas iut e sair da f o nome da porta poderia ser por exemplo I
depois u depois t e por fim F certo e claro que o nome da porta tem que respeitar os identificadores lá daquelas regrinhas que a gente apresentou bem aqui a gente tem a descrição do circuito o funcionamento do circuito e aqui a gente tem as três abordagens clássicas do System very log abordagem por fluxo de dados que a gente vai trabalhar na aula de hoje abordagem hierárquica que a gente vai trabalhar com isso só lá na segunda unidade e abordagem comportamental que a gente vai trabalhar na terceira certo então a abordagem para fluxo de dados
basicamente é você descrever as expressões que relacionam a saída com a entrada e o System ver log ele tem vários operadores que podem ser utilizados operadores lógicos aritméticos de comparação desloco E por aí vai é uma tabela de operadores porém aqui no curso eu vou só deixar vocês utilizarem os lógicos certo ou seja vocês vão utilizar apenas operações lógicas para descrever a relação de entrada saída vai ser mais do que o suficiente aqui PR disciplina teórica e Diferentemente do que acontece por exemplo em qualquer linguagem de programação em que você coloca sói o valor que
você quer atribuir iG pressão aqui no System very log você não pode fazer isso você tem que colocar antes essa palavra reservada aqui ó assign a s s i n g assign certo então você coloca assign aí você coloca a saída o que você quer atribuir ou você pode atribuir também dados intermediários igual Aí você coloca a expressão lógica essa expressão pode ser uma constante um segmento de Vetor ou uma expressão mesmo aqui a gente só vai trabalhar com caso da expressão em si certo e para construir as expressões a gente tem que definir os
operadores e os operadores que a gente tem aqui são quatro os operadores lógicos o operador not que é um ti operador and que é um I comercial operador or que é uma barra e o operador Lógico xor que é um chapéu certo que se quem é um pouco mais experi experiente de ser sabe que é exatamente os mesmos operadores que você tem lá no C então por exemplo se você tiver a = 0 e b = 1 se você fizer not a aí o not é a única operação que você tem que fazer antes do
operando certo então você tem que colocar ti a é note a isso como a Vale zer note a Vale 1 se você fizer note B como B vale 1 note B vale z0 aí os outros operadores é como vocês estão acostumados fica entre dois operandos né então a A e B aqui ó como a Vale 0 B vale 1 A e B vale z0 a barra né que é a or B como a Vale 0 e B vale 1 a or B vale 1 e o chapéu que é o xo como a Vale 0 B
vale 1 São entradas diferentes na saída da xo a saída vai ser igual a 1 e como você faz atribuição é do mesmo jeito que você faria qualquer linguagem de programação A única diferença é que você precisa do assign antes então assine x = ti a você tá querendo dizer que x recebe note a Aine Y A e Comercial B você tá querendo dizer que Y é a e b Aine Z A bar B você tá querendo dizer que Z é a or b e você pode fazer com mais de uma operando certo então assine
q a e Comercial b e Comercial C quer dizer que q recebe a n b NC e aqui w recebendo aor b o SY ele tem precedência do operador já padrão então o operador not tem precedência maior em relação ao operador e precedência Menor é o operador o certo com isso a gente já consegue descrever qualquer circuito emem ver log certo pelo menos os mais elementares Então vamos fazer esse exemplo número que eleu SY log Escreva um circuito digital que possui as seguintes relações as seguintes expressões lógicas de saída são duas saídas o meu circuito
F1 e F2 aqui tá em função de a b c mas tá errado era para ser em função de X Y Z F1 é x ou anegado Z F2 é x y negado ou x negado Z bem a gente vai realizar a descrição desse circuito e qual ide a gente vai utilizar nenhuma a gente vai utilizar um editor de texto que no meu caso eu utilizo o v code Mas se você quiser utilizar o bloco de notas dá certo mas não recomendo recomendo você utilizar um um editor de texto um pouco mais voltado para programação
no caso aqui houvesse code só que para simular aí a gente vai utilizar um software que eu pedi para vocês baixarem que é gratuito que é o Model sim porque é o quê é 1 GB né É por que eu para baixar o Model sim porque é o software padrão na indústria certo então na indústria o pessoal utiliza esse software para realizar simulação certo e o que eu vou fazer a simulação é testar para todas as possíveis condições de entrada e elaborar tabela verdade do circuito que já para adiantar eu já tô apresentando aqui ó
as entradas x y z e as saídas F1 e F2 já tô apresentando já pra gente e facilitar a nossa vida então vamos realizar a descrição Então a gente vai no vs code no meu caso né certo aqui tá um projeto que eu est fazendo e a recomendação que eu faço é o seguinte não é obrigatório mas eu gosto de instalar a extensão você vai aqui nas extensões do V code e procura por qualquer extensão de verilog porque por padrão ele não vem certo aqui a internet não tá colaborando né amigo L você procura qualquer
extensão que tem verilog no meu caso eu já vou mostrar a extensão que eu tenho instalada ó é essa daqui ver log HDL certo ou essa daqui ó verilog HDL bar system verilog é até melhor essa daqui você baixa qualquer extensão para ter suporte a v log não é para compilar é para fazer a formatação do código certo para deixar as as corzinha né Como diz minha namorada então eu vou criar aqui só uma pasta né essa pasta eu vou disponibilizar depois essa pasta sver log eu vou fazer aqui exemplo 15 é o que tá
fazendo né e vou criar um arquivo o nome do arquivo ele tem que ser igual o nome do módulo então eu vou chamar esse módulo de circuito vou chamar circuito certo a extensão do System ver log é sv certo então circuito PSV então aqui já vou criar o meu circuito claro que aqui a extensão vai me dar o a completa mas não vou utilizar ele certo então a primeira coisa que você começa é digitando a palavra module e agora você dá um nome do seu módulo que Nesse caso tem que ser igual ao nome dos
do do arquivo certo como o arquivo é circuito o nome do módulo é circuito também abre parêntese fecha parêntese certo e aqui você já fecha o módulo com a palavra n mulle certo aqui entre esses parênteses você vai colocar justamente as portas ou seja os pinos de entrada e os pinos de saída você poderia fazer tudo numa linha só pode Sem problema nenhum só que a formatação vai ficar uma porcaria Então como é que eu recomendo você quebrar a linha certo Então veja que o meu circuito Quem são as entradas x y e z vou
começar pela entrada x Então vou declarar uma entrada qual o tipo que eu vou declarar dessa entrada para vocês que estão começando vocês podem sempre utilizar esse tipo tipo Logic e a minha entrada vai ser x e eu coloco vírgula ah professor e não porque ponto e vírgula por vocêde interpret aquio aqui MDO e circuito como se fosse função e você separ os argumentos de uma função usando V no no py como se você separando os argumentos de uma fun declaração de fun no C ou no pyth a outra entrada é Y né então é
uma entrada o tipo dela é o l o nome dela é y e eu tenho outra entrada que no caso aqui é Z então entrada o tipo novamente para vocês podem usar sempre Logic Z E no caso eu tenho duas saídas né F1 e F2 então tem uma saída output Logic né F1 fazer assim e por fim a outra output Logic F2 ah Professor último tem vírgula não por quê Porque quando você tá declarando a função por exemplo função e você separa os argumentos X Y Z e assim por diante o último argumento depois do
último argumento não tem vírgula né do mesmo jeito aqui depois do último argumento do módul também não tem vírgula certo então É como se você tivesse literalmente declarando O protótipo de uma função certo alguma dúvida até o momento e agora não só vírgula e o que eu faço agora eu não tenho as expressões é só descrevê-las né eu vou colocar aqui para separar vou fechar essa aba aqui e eu vou pegar as expressões F1 no caso vai ser igual a x ou Y negado Z não é então o que eu faço uso a diretiva ass
para realizar uma atribuição eu quero atribuir quem F1 vai ser igual a quanto aí eu coloco a expressão x ou aí o o É assim né Y e z eu posso até colocar parênteses para simplificar assim melhorar a legibilidade mas não precisa porque o System ver log ele já tem a precedência dos operadores tiver par aí no caso aqui eu tô pedindo el primeiro fazer o not depois fazer o end né e por fim fazer o mas se eu fizesse 100 funcionaria também porque ele já tem justamente essa precedência dos operadores primeiro not depois o
n e por fim o o certo tô colocando aqui porque aí é um vício meu certo colocar os parênteses mas vocês fiqu à vontade e F2 vai ser quem x e o negado de Y né então x o i comercial note y o o o qu o negado de x e z e eu vou colocar aqui esses parênteses assim só novamente para melhorar a legibilidade do código mas fiquem à vontade de colocarem ou não certo T tô dizendo que eu faço primeiro o note Y depois faço o i comercial com x depois faço o Note
x faço o i comercial com z e só depois faço o o mas novamente esses pares porque o v log já tem essa precedência cer Tem mais algum expressão de saída para declarar tem não né acabou é só isso veja que não tem dificuldade nenhuma se você tiverão lógica aqui poss pode pode eu vou fazer isso no próximo circuito cer Então veja que não ten dificuldade nenhuma e de fato é isso mesmo a parte de descrição de hardware ela não tem dificuldade Qual é a dificuldade é a expressão se obter expressão lógica mas depois com
a expressão lógica feita vai se embora só que a gente precisa testar isso aqui e como é que a gente testa usando o Model Sim nesse caso aqui eu vou usar o Model sim existem outras ferramentas para se realizar o simulação o quartos é uma dessas ferramentas e tem também o icaros verilog que também é uma ferramenta até open source mas no caso aqui eu vou usar o mod sim porque novamente é o padrão da indústria então dá para ver que o Model c é um software bem feio certo ele tem essa mesma interface faz
uns 20 anos certo mas funciona funciona Então a primeira coisa que você tem que fazer aqui no Model sim é criar um projeto para criar um projeto no Model sim Você vai em file New Project aqui vai abrir uma janelinha você dá o nome do projeto Eu Vou Chamar esse projeto circuito e e agora na segunda opção tem a localização do projeto a localização do projeto Minha recomendação é que você coloque na mesma pasta no qual você criou o seu arquivo vlog o sistem vlog no meu caso é essa daqui pronto precisa fazer mais nenhuma
outra configuração é só apertar ok quando você clica em Ok a primeira coisa que apresenta essa telinha aqui ó para adicionar itens ao projeto e Ness você vai adamente o arquivo que você acab deever então você essa opção ex F cer Então você vai adicionar projeto clica aqui em brow e aqui já vai ver o circuito PSV que é l então clica abr aper Ok e veja prima coisa que você tem que fazer é compilar a parte de compilação serve pr basicamente verificar sintaxe como é que você compila aqui nessa área Branca você clica com
botão direito vai em compile e comp certo aqui embaixo vai aparecer as informações da compilação ó vai dizer compile of circuito PSV as quer dizer que compilou com sucesso Se tivesse algum erro por exemplo vamos tirar esse ponto em vírgula aqui certo se eu mandasse compilar novamente aí ele acusaria o erro para eu descobrir onde tá o erro eu vou aqui na mensagem e dou dois cliques certo não é um clique só não é dois aí ele vai dizer qual é o erro né aí aqui ele diz o seguinte ó erro aí um monte de
coisa linha né próximo syntax erro e esperava-se ponto vírgula ou vírgula então você vai lá na linha no linha 9ve tá aqui né mas o erro é na linha oito é porque que nem no C né se dá um erro de ponto e vírgula ponto e vírgula sempre ele acusa na linha após alguém tinha falado Então vamos corrigir o erro né Vamos compilar agora ele compilou com sucesso outra forma de você verificar é aqui ó tá vendo que aqui em status tem um Visto quer dizer que a compilação ali foi feita com sucesso não basta
só compilar tem que simular como é que você simula você vai aqui em simulate start simulation certo quando abrir essa janela você vai ter que clicar aqui em work ao lado de work tá vendo que tem o mais você clica nele a vai abrir que você tem no projeto que a única coisa aqui é esse módulo que é chamado circuito aí você seleciona ele e Ok quando ele apertar o ele vai abrir essa telinha que é a telinha de simulação e o Mod Sim Ele só faz simulação via forma de onda certo muitoe a primeira
vez que vocês abrirem o Mod vai tá assim certo não vai aparecer aquela tela preta a tela preta é onde tá os resultados Então a gente tem que mostrar ela né para você ver a tela preta você vai aqui em viw e seleciona a última opção aqui ó Wave aí você vê a forma de onda a primeira coisa que você tem que fazer aqui é selecionar as entradas e saídas e jogar para sua forma de onda as suas entradas e saídas estão aqui ó nessa região chamada objects dá para ver ó tem x y z
F1 e F2 o que eu vou fazer é selecionar e arrastar PR forma de onda você pode fazer um por um arar X arar Y ou você pode fazer tudo de uma vez só como segura o control e sai clicando Eita fechar aqui e sai clicando ou clica no primeiro que você quer selecionar shift o último certo então vou adicionar x o z F1 F2 o que tava faltando E como é que você faz a sim aqui a simulação no m Sim ela tem duas formas de ser feita a primeira é uma simulação que a
gente chama iterativa que é a simulação que você vai força as entradas simula e verifica saídas depois força mais uma entrada simula e verifica a saída Essa é a forma iterativa não é a melhor forma de você fazer a simulação a melhor forma é através de um script que a gente chama test Bank porém para entender como funciona a test Bank vocês tem que ter um pouco mais de maturidade insiste em ver log Então a gente vai ficar lá pro final do curso vamos fazer a interativa que já vai dar certo para vocês então eu
vou primeiramente forçar para fazer a tabela verdade né então a tabela verdade tá aqui certo do lado vou dividir a tela aqui a tabela verdade e eu tenho que gerar essas condições da tabela verdade a primeira é x = 0 Y = 0 Z = 0 como é que eu forço x assumir o valor z0 eu vou na entrada x clico com botão direito e seleciona essa opção aqui ó forse aqui valu eu coloco zer faço a mesma coisa para Y clico com botão direito for value coloco zer e faço a mesma coisa para Z
clico botão Dire for valor zero Pronto ah Professor mas não apareceu ainda nada é porque você ainda tem que simular para você simular tá vendo esse número aqui ó 100 PS tem um botãozinho do lado botãozinho do lado é Run É só você clicar aí ele simula veja ó Isso aqui é só você clicar e arrastar certo essa essa linha amarela aqui ela facilita a gente analisar veja que quando a entrada for 0 a minha saída F1 Vale 0 minha saída F2 Vale 0 então primeira linha da tabela verdade tá ok a próxima é 0
0 1 né x = 0 Y = 0 z = 1 Eu só preciso mudar as entradas que mudam Então como x permanece em zero Y permanece em zero a única coisa que muda é Z eu clico o botão direito em Z vou em Force coloco e agora simur aí arracha aqui para encaixar nessa situação ó para x = 0 Y = 0 e z = 1 a minha saída F1 Vale 1 minha saída F2 Vale 1 também tá correto a próxima linha da tabela verdade é x = 0 Y = 1 então eu vou
forçar Y ser ig a 1 e z = 0 e vou clicar novamente no mesmo botão ao lado onde tem 100 PS para essa condição X x = 0 Y = 1 z = 0 a minha saída F1 é 0 minha saída F2 é 0 tá batendo né e a próxima condição é x = 0 Y = 1 e z = 1 né então clica aqui em Z Opa clique aqui em Z for Z ser = 1 então clico novamente aqui para simular x = 0 Y = 1 z = 1 F1 Vale 0 e
F2 Vale 1 tá correto né pela tabela verdade aqui que a gente tá montando agora a próxima condição é x = 1 então forse x A1 y c0 e zc 0 então vamos simular aqui x = 1 Y = 0 Z = 0 F1 é 1 e F2 é 1 tá cor agora vou simular para 10 0 1 x Vale 1 Y Vale 0 Z Vale 1 Então vou simular x = 1 Y = 0 z = 1 a saída F1 Vale 1 saída F2 Vale 1 tá correto né Ó agora eu vou colocar x
= 1 Y = 1 e z = 0 e vou simular então x = 1 Y = 1 z = 0 F1 foi 1 e F2 foi 0 tá batendo né e agora falta a última condição da tabela verdade que é x = 1 Y = 1 z = 1 vou simular e F1 foi iG 1 F2 fo igual a 0 então bateu certo chegou nesse ponto acabou a simulação lá no projeto como eu peço a simulação em forma de onda vocês só bateri o print dessa tela aqui cer Ok não mas eu vou fazer
eu vou explicar outra forma de fazer a simulação que é um pouco melhor no próximo exemplo eu mostrar como faz mas entenderam até agora Uhum bem existe o conceito que aqui eu tô chamando de sinais eu tô usando esse nome sinais porque é é o nome que se utiliza lá no vhdl aqui no verd log ele não tem um nome específico para isso não certo o que é sinal sinal é um valor intermediário que ele é interno ao circuito Ou seja você não consegue enxergar um sinal fora do circuito só dentro certo então um sinal
é declarado dentro de um módulo e só pode ser visualizado dentro do módulo ou seja não pode ser visualizado fora do módulo e basicamente os sinais servem para quê para você fazer a ligação de um ponto até outro ponto ou para fazer valores intermediários certo e como é que você declara um sinal é muito parecido como você declara a porta você coloca o tipo do sinal e depois você coloca o nome daquele sinal o tipo a gente tá usando sempre tipo Logic e o nome aí a gente dá o nome que quiser certo para entender
um pouco melhor como a gente usaria sinais nesse caso a gente vai implementar esse circuito aqui ó é o mesmo circuito anterior certo só que dessa vez eu vou implementar através das expressões lógicas certo então desculpa através do diagrama de circuito lógico então utilizando o System very log descreve um circuito digital que possui o seguinte diagrama de circuito lógico no final do dia é o mesmo circuito que a gente descreveu anteriormente só que a gente vai partir do diagrama certo e o que eu vou fazer aqui eu vou tentar escrever vai ficar uma porcaria Mas
enfim concorda ó esqueça tudo que é entrada tudo que é saída concorda que eu vou vou precisar de um fio para ligar este inversor até essa porta lógica n Então vou chamar esse fio por exemplo de W1 aqui ó concordo que eu vou precisar de um fio para ligar a saída Dessa porta n na porta lógica or aqui eu vou chamar esse fio de W2 certo dessa porta lógica inversora até essa porta lógica k n concordo que eu vou precisar de um fio vou chamar de W3 ah professor e porque eu não preciso aqui de
X até Y porque de X até essa porta lógica i o aqui porque x já é entrada certo você só vai precisar eu só tô falando aqui do que tá dentro do circuito vou precisar de outro fio para ligar essa porta inversora essa porta lógica end aqui né vou chamar de W4 vou precisar de F para ligar essa porta lógica n até essa porta lógica o não é vou chamar ele de W5 e por fim eu vou precisar de um fio para ligar essa porta lógica n nessa porta lógica or aqui né vou chamar de
w6 pronto preciso mais de algum outro fio não né então entendido isso vamos lá escrever esse circuito não usando essas expressões mas sim partindo do diagrama certo eu vou manter as anotações que vai me ajudar então vou aqui novamente no V code eu vou fechar essa essa pasta e vou criar outra no caso aqui seria o exemplo 16 Então vou criar um novo arquivo eu também vou chamar de circuito PSV certo começa pela palavra reservada module o nome do circuito que se chama circuito abro e fecho parênteses e boto ponto e vírgula e aqui eu
já vou fechar o módulo end mul aqui dentro do parênteses vou colocar a declaração das portas e para melhorar a formatação eu vou quebrar a linha certo então esse circuito Quais são as entradas dele X é entrada o tipo l y entrada também tipo Logic e z entrada tipo Logic e quais são as saídas F1 também tipo L e F2 também tipo L é o que eu t dizendo pelo menos aqui de início a gente só vai trabalhar com tipo Logic então entrada vou ter uma entrada do tipo Logic chamada x eu vou ter uma
entrada do tipo Logic chamado Y eu vou ter uma entrada do tipo Logic Z pergunta que já foi feita Professor x y z todo mundo é entrada todo mundo é o mesmo tipo eu posso declarar todo mundo na mesma linha pode eu posso fazer assim ó X Y Z do mesmo jeito F1 é uma saída do tipo Logic output Logic F2 aqui não tem vírgula né porque é o último argumento da função mle do mesmo jeito F1 e F2 como ambas são saídas e ambas são tipo lógic eu posso juntar Certo OK agora deixa eu
dizer uma coisa isso não é muito comum não você fazer por incrível que pareça geralmente pessoal para cada linha uma entrada uma coisa que eu não falei né são os comentários comentários é barra barra olá eu sou um comentário ou pode ser barra estrela estrela Barra Olá eu sou um comentário em mais de uma linha veja só pronto então vamos lá vamos partir do diagrama de circuito né Primeira coisa eu não vou não t descrevendo as expressões descrevendo a partir do diagrama a primeira coisa que vou precisar fazer aqui é declarar os sinais intermediários que
nesse caso vai ser quem W1 W2 W3 W4 W5 w6 Então vou declarar W1 W1 é um Logic que é o tipo Logic eu vou chamar ele W1 W2 mesma coisa então Logic W2 W3 mesma coisa Logic W3 W4 Opa W5 e w6 posso juntar todo mundo na mesma linha posso da mesma forma como eu posso juntar lá dentro da declaração das portas posso juntar aqui na declaração dos signos Então posso fazer assim certo então tô declarando esses signos que são valores intermediários vamos lá vamos descrever as expressões então como é você faz nesse caso
faz as expressões intermediárias então por exemplo Faria Como se você tivesse analisando o circuito mesmo na prática para esse circuito de cima você não tem que primeiro fazer a função lógica note aqui né então você vai calcular quem é W1 primeiramente quem é W1 W1 vai ser quem Y barrado né então note Y e agora você consegue calcular W2 né W2 vai ser quem W1 e quem Z aí agora você consegue calcular F1 F1 vai ser quem W2 o x ou x or W2 mesma coisa agora W3 né W3 vai ser quem not Y consigo
calcular W5 aqui já né Mas vocês vão ver depois que não vai fazer importância nenhuma W5 vai ser quem W3 e x a x agora W4 né W4 é not x x w6 né já consegui calcular vai ser W4 e z não é e agora F2 né F2 vai ser W5 or w6 Pronto né porque eu já descrevi tudo no meu circuito veja que ah ficou mais grande ficou Não tô dizendo que é melhor fazer dessa forma não mas é uma alternativa se você tiver um diagrama de circuito você não quiser obter a expressão lógica
dele para descrever ele você pode fazer dessa forma usar os signos para fazer os intermediários Ok fazer uma pergunta eu poderia colocar o F2 aqui em cima não posso pode pode por quê Porque essa daqui é a maior diferença entre uma linguagem de descrição e uma linguagem de programação tudo isso aqui tá rodando ao mesmo tempo não é sequencial então numa linguagem de programação do ser ele executa primeiro essa linha depois a pro depois a PR e assim por diante numa linguagem de de hardware é tudo ao mesmo tempo ou seja uma linguagem de descrição
de hardware ela tem um paralelismo perfeito certo Por isso que quem trabalha com programação paralela parte de paralela se você conseguir fazer na fpga você tem um paralelismo não tem como ser melhor certo não tem como ser melhor em termo de paralelismo que o fpga você pode pegar aqui um ryen 4 bilhões com 300 núcleo não vai ser melhor que a fpga não certo que tudo tá rodando ao mesmo tempo Ok vamos agora é inclusive isso é uma coisa gente que eu tô reforçando porque é fonte de confusão de muitas pessoas certo essa questão de
achar que é como se fosse uma linguagem de programação que tem que ser sequencial não precisa certo Oi W tem dá para ser é uma coisa que a gente passa batido enfim se fosse para fazer digamos em casa com mais calma você faria só com um deles certo mas aqui a gente tá fazendo rápido mas pode pode eliminar um deles Sem problema nenhum vamos simular né aqui no mod assim você pode fechar né para abrir novamente ele pro padrão abre o projeto anterior então se você criar um novo projeto file New Project Ele pergunta se
você quer fechar o projeto aí você diga que quer a o Project name eu também vou chamar de circuito e a pasta no caso vai ser a pasta do arquivo que no caso exemplo 16 eu vou clicar em Ok e aqui como eu já descrevi o a projeto anteriormente eu vou adicionar um arqu um projeto um arquivo já existente V em Browser circuito P sv Ok Close aqui tem um detalhe uma coisa aqui é o seguinte você pode usar M como editor de texto também se você dois cliques abre aqui um editor de texto eue
acho uma porcaria já V que tá tudo errado aqui mas enfim eu não gosto eu prefiro fazer code e importar até porque se eu alterar alguma coisa aqui nocode ele já puxa para cá certo não precisa importar novamente não vamos compilar né cli no botão direito comp comp All show compilou correto Então não teve nenhum erro de sintax mas eu tenho que verificar se agora tá descrito corretamente né Vamos simular o circuito simulate simulation aqui nessa janela você aqui em work Clic o lado mais e veja que tem um módulo chamado circ Ok e aqui
x y z F1 F2 mas ele puxou também W1 W2 W3 W4 W5 w6 é porque o Mod sim a característica dele além dele importar as entradas e saídas ele também importa pra simulação os signal certo mas a gente não vai precisar utilizar eles então a gente só vai selecionar x y z F1 e F2 certo esses signos aqui por hora a gente não vai utilizar mas assim Em algumas situações pode ser útil mas não nessa Então vamos clicar e arrastar e agora vamos fazer Nossa simulação só que aqui eu vou fazer um artifício ensinar
um artifício aqui para vocês ao invés de ficar forçando um artifício que pode ser feito é o seguinte eu não vou explicar de onde vem esse artifício mas funciona você clica com o botão direito na entrada menos significativa da tabela verdade que no você observar tabela verdade a entrada menos significativa a que mais à direita é o z Então você clica com botão direito vai em CL certo a gente aind vai ver o que é CL Mais PR frente do curso é um artifício só cer aqui a única coisa você tem que notar período precisa
mudar não deixa 100 mas essa opção aqui F você coloca Fall certo e aperta OK aí agora você vai pra próxima entrada que no caso aqui seria Y né Clica com o botão direito vai em clock aqui o período você sempre coloca o dobro do que você colocou no anterior o anterior não foi 100 você coloca 200 e Fed sempre certo e por fim agora x Clica com botão direito o dobro anterior anterior era quanto agora você coloca 400 F eding fale Pronto não vou explicar porque funciona mas isso aqui gera todas as combinações possíveis
da tabela verdade certo vamos lá vamos simular Run aqui ele já gera dois pares de uma vez só então vamos colocar aqui e ver funcionamento x = 0 Y = 0 Z = 0 sai F1 0 F2 0 tá correto né x = 0 Y = 0 Z = F1 foi 1 e F2 foi 1 tá correto se eu simular mais uma vez aqui vai acontecer o qu x = 0 Y = 1 z = 0 F1 Vale 0 F2 Vale 0 tá correto x = 0 Y = 1 z = 1 F1 Vale 0
F2 Vale 1 tá correto agora vamos simular mais x = 1 Y = 0 Z = 0 F1 Vale 1 F2 Vale 1 e para x = 1 Y = 0 z = 1 F1 Vale 1 F2 Vale 1 tá correto também agora x = 1 Y = 1 z = 0 F1 Vale 1 F2 Vale 0 tá correto ó F1 Vale 1 F2 Vale 0 e por fim para x = 1 Y = 1 z = 1 F1 Vale 1 e F2 Vale 0 tá correto então é o mesmo circuito né só que de
duas formas diferentes Ok então com isso aqui pessoal a gente eu apresentei basicamente o que vocês precisam entender de System ver log para fazer muita coisa inclusive o projeto de vocês né então aqui vou aqui abrir o projeto CC digitais 2024 ao tá aqui em em listas projeto um então ó a questão Um vocês já conseguem fazer porque eu já dou as expressões lógicas certo são quatro circuitos quatro expressões lógicas né a segunda também porque eu já dou os diagramas a terceira já dá até para fazer mas como eu não expliquei mapa de carn é
esse circuito vai ficar muito grande certo quando eu explicar mapa de carn na semana que vem a gente vai aprender um método em que a gente já obt uma expressão Mais Simples então eu recomendo vocês deixarem só pra semana que vem a questão 4 também dá para fazer mas eu recomendo vocês esperarem a aula de mapa de carn mesma coisa questão 5 também já dá para fazer mas recomendo esperar a aula de mapa de carnu mas a aula 1 e aula do aula 1 Aula dois questão 1 questão do já dá para fazer com que
vocês aprenderam hoje e com conhecimento teórico da disciplina certo Então essa é a parte de S very log certo já podem começar a fazer o projeto e a aula de hoje fica por aqui então boa noite aí pessoal e até a até segunda né