Começando com Verilog 2 - 模块实例
欧巴,eae?
增强复杂性或抽象性以及模块的实例性
通过Generate For 生成一个复杂的N 模块实例
Isso é tudo!
欧巴,eae?
我在发布后对He4rt 开发者特别有影响,并参与了 3 个不同的项目,但并非如此。
Porém, acredito que ainda tem mais algumas coisas a serem abordadas para que você comece bem com Verilog and primemente tenha todo or conhecimento para gabaritar or HDLbits .
Bom,como o título já diz,esta é aparte dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois dois doi
https://dev.to/marlonhenq/comecando-com-verilog-13n0
增强复杂性或抽象性以及模块的实例性
基本原则是,在模块实例结束后,所有的操作都将结束。
Os que possuem olhares muito atento podem até ter percebido isso quando falei sobre Verilog Estrutural“O Verilog Estrutural cria sua lógica chamando portas como módulos.”,porém irei explicar mais detalhadamente agora。
使用 Verilog 和操作符进行多路复用器的形式:
module top_module(
input a, b, sel,
output out
);
assign out = sel ? b:a;
endmodule
观察:Olha ai uma nova 形式为声明式操作系统输入和输出,没有后通道 eu 重复 semper a palavra 输入和输出 para cada entrada/saida,mas caso elas sejam iguais (isto é, possuem a mesma quantidade de bits) você pode apenas colocar virgulas (como semper Verilog) possui várias formas de fazer a mesma coisa)。
如果您没有使用多路复用器,则可能会遇到多种情况。没有caso os输入“a”和“b”作为多路复用器的入口,a“sel”和nossa porta seletora,caso“sel”receba 0或que vem por“a”和direcionado a saída“out”,caso“sel”receba 1或que vem de“b”será direcionado a “出去”。
Ele pode ser 描述:
| 一个 | B | 塞尔 | 出去 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 |
Aí está a recebendo do último código com “a” recebendo 1 (representado pelo verde), “b” recebendo 0 (vermelho) e “sel” recebendo 0, assim o valor de “a” é direcionado a “out”:
Mudando a entrada de “sel” para 1, temos o que vem por “b” indo para “out”:
Mas e se agora quisermos um Multiplexador de 4 entradas?
当然,在“a”、“b”、“c”和“d”选项中,“sel”可以通过 2 位进行选择。
E um código que poderia 解析器 isso seria:
module top_module(
input a, b, c, d,
input [1:0] sel,
output out );
assign out = sel[1] ? (sel[0] ? d : c) : (sel[0] ? b : a);
endmodule
代表方式:
功能是否是一种合法的三项功能,以及 8 种功能的多路复用器? Ai sim,temos um grande Problema,e uma forma mais beautifule de fazer isso é instanciar módulos por outros módulos。
Para instanciar modulos dentro de outros módulos em Verilog a sintaxe é “nome_do_modulo nome_da_instanciação (entrada1, entrada2,… saida1…);”。
Vamos lá,tendo o Multiplexador de 2 entradas podemos fazer um Multiplexador de 4 entradas instanciando o de 2 entradas três vezes,segue o código:
module mux2( //multiplexador de 2 entradas já apresentado
input a, b, sel,
output out );
assign out = sel ? b:a;
endmodule
module mux4(//multiplexador de 4 entradas
input a, b, c, d,
input [1:0] sel,
output out );
wire fio1, fio2;
mux2 multiplexador1 (a, b, sel[0], fio1);
mux2 multiplexador2 (c, d, sel[0], fio2);
mux2 multiplexadorFinal (fio1, fio2, sel[1], out);
endmodule
表示模 mux4 的图形:
Outra forma de instanciar módulos (mais verbosa, porém que prefiro) é a de repetir o nome das portas do módulo que está sendo instanciado dessa forma:
module mux4(
input a, b, c, d,
input [1:0] sel,
output out );
wire fio1, fio2;
mux2 multiplexador1 (.a(a), .b(b), .sel(sel[0]), .out(fio1));
mux2 multiplexador2 (.a(c), .b(d), .sel(sel[0]), .out(fio2));
mux2 multiplexadorFinal (.a(fio1), .b(fio2), .sel(sel[1]), .out(out));
endmodule
阿西姆,如果您要发送或旋转,则无需使用原始模块的命令,包括可能的最佳算法(caso não for necessário para algum Tipo de instanciação)。
通过Generate For 生成一个复杂的N 模块实例
与索马多尔·宾纳里奥 (Somaador Binário) 一起结束循环,基本的 3 项内容,从数字到接收器,从“vai um”(cin) 开始,到“vai um”(cout),然后再到“vai um”(cout)。
Um código para um somador binário de um único dígito é:
module adder(
input a,b,
input cin,
output cout,
output sum );
assign sum = (a ^ b ^ cin);
assign cout = ((a & b) | (b & cin) | (cin & a));
endmodule
O somador binário de um bit é graficamente 代表阿西姆:
um somador de 2 bit apartir da somador simples pode ser:
module adder2(
input [1:0] a, b,
input cin,
output cout,
output [1:0] sum );
adder ad1 (a[0], b[0], cin, coutIntern, sum[0]);
adder ad2 (a[1], b[1], coutIntern, cout, sum[1]);
endmodule
观察:Olha ai também uma forma nova de se declarar um 电线!如果“coutIntern”是隐含形式的声明,则可以使用“wire coutIntern;”发送我们的模块来声明正式的消息。前门。
接下来,请注意,请注意以下事项: um único bit podem ser declarados dessa forma。
2 位 fica assim 的绘图:
100 位的集市是什么? Acho que seria muito trabalho repetir essas linhas 100 vezes,né?
E é mesmo, mas temos uma forma mais beautifule de fazer isso, oGenerate For。
O 生成一个可执行的命令,并根据条件实现模块(或模块)实例和电路。
使用“if”、“cases”和“for”来实现循环,以实现交互的实例模块。
Falando pode parecer 困难,então vamos direto para o código que é bastante autoexplicativo:
module adder100(
input [99:0] a, b,
input cin,
output [99:0] cout,
output [99:0] sum );
genvar i;
adder ad0(a[0], b[0], cin, cout[0], sum[0]);
generate
for (i = 1; i < 100; i = i + 1) begin
adder ad (a[i], b[i], cout[i-1], cout[i], sum[i]);
end
endgenerate
endmodule
使用“adder100”模块的命令以及声明这些命令的内容,可以使用“genvar”命令或“i”命令来执行命令。
如果是加法器和实例 (ad0) 的初始模块,那么您将能够准确地获得“cin”的价值,并在该循环中发挥作用。
现在,我们要讨论的事项有 99 个模块,它们之间可以相互转换,或者可以通过循环播放来进行。
Assim,我们可以通过 C 语言声明,在位模加法器上进行交互和实例化。
观察:使用一种交互语言程序的想法和对节奏的长期调节的辅助,可以自动完成 100 行的操作科迪戈。
没有最终的,o que teremos é 100 modulos rodando ao mesmo tempo, como se fossem 100 CIs de adição binária em uma mesma placa.布莱兹?
E que fique a dica, essa é a resposta para o exercício Adder100i do HDLBits!
电路图的可视化:
呃… Bom,这是一个伟大的电路,可以用于可视化和测试图形,Pelo DigitalJS。最多可以有 15 个实例(100 个),并且可以通过笔记本进行模拟。
赛道上的测试结果如何?
睾丸!如果您想了解“TestBench”的详细信息,请参阅该帖子!
Isso é tudo!
Como sempre,obrigado port ter lido este post até aqui!
Demais dúvidas、commentários 和 sugestões podem ser embaixo (para o pessoal do DevTo) 或 lá no meu Twitter @marlonhenq。
飞!
文章来源:https://dev.to/marlonhenq/comecando-com-verilog-2-instanciacao-de-modulos-1mno






