Annuaire d'articles
- 11.vecteurs | vecteur0
- 12.vecteurs plus en détail | vecteur1
- 13.Sélection de la partie vectorielle | Vecteur2
- 14.Opérateurs au niveau du bit | Portes vectorielles
- 15.Portes à quatre entrées | Portes4
- 16.Opérateur de concaténation de vecteurs | Vecteur3
- 17.Inversion de vecteur 1 | Vecteur
- 18. Opérateur de réplication | Vecteur4
- 19.Plus de réplication | Vecteur5
11.vecteurs | vecteur0
pratique : Construisez un circuit qui a une entrée de 3 bits, puis génère le même vecteur et le divise également en trois sorties distinctes de 1 bit. Connectez la sortie o0 à la position 0 du vecteur d'entrée, o1 à la position 1, etc.
Dans un diagramme, une coche avec un numéro à côté indique la largeur du vecteur (ou « bus »), plutôt que de tracer une ligne distincte pour chaque bit du vecteur.
module top_module (
input wire [2:0] vec,
output wire [2:0] outv,
output wire o2,
output wire o1,
output wire o0 ); // Module body starts after module declaration
assign o0 = vec[0];
assign o1 = vec[1];
assign o2 = vec[2];
assign outv = vec;
endmodule
En fait, on peut constater que tant que vous avez les bases du langage C ou d'autres langages informatiques, il n'est pas difficile de se lancer dans les questions vetilog. Lorsque vous écrivez du code, vous n'êtes vraiment pas sûr que la grammaire soit correcte. en vous appuyant sur votre compréhension du langage C, essayez. Cela s'est exécuté et cela a réussi.
12.vecteurs plus en détail | vecteur1
pratique : Construisez un circuit combinatoire qui divise un demi-mot d'entrée (16 bits, [15:0] ) en octets inférieurs [7:0] et supérieurs [15:8].
`default_nettype none // Disable implicit nets. Reduces some types of bugs.
module top_module(
input wire [15:0] in,
output wire [7:0] out_hi,
output wire [7:0] out_lo );
assign out_hi[7:0] = in[15:8];
assign out_lo[7:0] = in[7:0];
endmodule
13.Sélection de la partie vectorielle | Vecteur2
pratique ;Un vecteur de 32 bits peut être considéré comme contenant 4 octets (bits [31:24], [23:16], etc.). Construisez un circuit qui inversera l’ordre des octets du mot de 4 octets.
AaaaaaaBbbbbbbbbCccccccDdddddddd => DddddddddCccccccBbbbbbbbbAaaaaaa
module top_module(
input [31:0] in,
output [31:0] out );//
// assign out[31:24] = ...;
assign out[31:24] = in[7:0];
assign out[23:16] = in[15:8];
assign out[15:8] = in[23:16];
assign out[7:0] = in[31:24];
endmodule
14.Opérateurs au niveau du bit | Portes vectorielles
Construisez un circuit doté de deux entrées de 3 bits qui calcule le OU au niveau du bit des deux vecteurs, le OU logique des deux vecteurs et l'inverse (NON) des deux vecteurs. Placez l'inverse de b dans la moitié supérieure de out_not (c'est-à-dire les bits [5:3]) et l'inverse de a dans la moitié inférieure.
module top_module(
input [2:0] a,
input [2:0] b,
output [2:0] out_or_bitwise,
output out_or_logical,
output [5:0] out_not
);
assign out_or_bitwise = a | b;
assign out_or_logical = a || b;
assign out_not[5:3] = ~b;
assign out_not[2:0] = ~a;
endmodule
15.Portes à quatre entrées | Portes4
pratique :
Construisez un circuit combinatoire avec quatre entrées, en [3:0].
Il y a 3 sorties :
out_and : sortie d'une porte ET à 4 entrées.
out_or : sortie d'une porte OU à 4 entrées.
out_xor : sortie d'une porte XOR à 4 entrées.
module top_module(
input [3:0] in,
output out_and,
output out_or,
output out_xor
);
assign out_and = in[3] & in[2] & in[1] & in[0];
assign out_or = in[3] | in[2] | in[1] | in[0];
assign out_xor = in[3] ^ in[2] ^ in[1] ^ in[0];
endmodule
Remarque : Le code peut être simplifié en
assign out_and = & in;
assign out_or = | in;
assign out_xor = ^ in;
16.Opérateur de concaténation de vecteurs | Vecteur3
pratique:
Étant donné plusieurs vecteurs d'entrée, concaténez-les ensemble puis divisez-les en plusieurs vecteurs de sortie. Il existe six vecteurs d'entrée de 5 bits : a, b, c, d, e et f, pour un total de 30 bits d'entrée. Il existe quatre vecteurs de sortie de 8 bits : w, x, y et z, pour 32 bits de sortie. La sortie doit être une concaténation des vecteurs d'entrée suivie de deux bits 1 :
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );
assign {
w,x,y,z} = {
a,b,c,d,e,f,2'b11};
endmodule
17.Inversion de vecteur 1 | Vecteur
pratique:Étant donné un vecteur d'entrée de 8 bits [7:0], inversez son ordre des bits.
module top_module(
input [7:0] in,
output [7:0] out
);
assign out = {
in[0],in[1],in[2],in[3],in[4],in[5],in[6],in[7]};
endmodule
18. Opérateur de réplication | Vecteur4
pratique:Construisez un circuit qui étend le signe d'un nombre de 8 bits à 32 bits. Cela nécessite une concaténation de 24 copies du bit de signe (c'est-à-dire répéter le bit[7] 24 fois) suivies du nombre de 8 bits lui-même.
module top_module (
input [7:0] in,
output [31:0] out );
assign out = {
{
24{
in[7]}},in};
endmodule
Remarque : 1. Faites particulièrement attention à l'utilisation des accolades ici. Les multiples et les suivants doivent former un tout. Au début, une parenthèse de moins a été ajoutée. J'ai longtemps cherché l'erreur, puis j'ai découvert après avoir vu les invites d'erreur.
19.Plus de réplication | Vecteur5
pratique:
Comme le montre le diagramme, cela peut être fait plus facilement en utilisant les opérateurs de réplication et de concaténation.
Le vecteur du haut est une concaténation de 5 répétitions de chaque entrée
Le vecteur du bas est 5 répétitions d'une concaténation des 5 entrées
module top_module (
input a, b, c, d, e,
output [24:0] out );
assign out = ~{
{
5{
a}},{
5{
b}},{
5{
c}},{
5{
d}},{
5{
e}}} ^ {
5{
a,b,c,d,e}};
endmodule
Remarque : 1. Des appareils orthodontiques sont également requis