Enregistrement d'apprentissage HDLBits-Verilog | Verilog Language-Vectors

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.
Insérer la description de l'image ici

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.

Insérer la description de l'image ici

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 :

Vecteur3.png

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:
Insérer la description de l'image ici
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

Je suppose que tu aimes

Origine blog.csdn.net/qq_43374681/article/details/132447513
conseillé
Classement