Đánh giá chủ đề:
  • 47 Vote(s) - Trung bình 2.85
  • 1
  • 2
  • 3
  • 4
  • 5
Lập trình mạch số với Verilog
Bài viết: #1
Verilog HDL tips and tricks

Verilog operators "&" ("and") and "|" ("or") can be applied to a bus. That allows to "gate" all the individual signals of a bus together.
wire [7:0] my_bus;

PHP Code:
// these 2 statements are equivalent
wire my_bus_is_all_1s = (my_bus==8'hFF);
wire my_bus_is_all_1s = &my_bus;

// these 2 statements are equivalent
wire my_bus_is_all_0s = (my_bus==8'
h00);
wire my_bus_is_all_0s = ~|my_bus;

// these 2 statements are equivalent
wire my_bus_is_non_0 = (my_bus!=8'h00);
wire my_bus_is_non_0 = |my_bus; 

2. Continuous vs. procedural assignment
Here are 3 different ways to write a 2-to-1 mux.

PHP Code:
wire abc;
// This continuous assignment
wire my_mux = (c);

// is equivalent to this procedural assignment
reg my_mux;
always @(or or c)
begin
  
case(a)
1'b1: my_mux = b;
1'
b0my_mux c;
  
endcase
end

// and this one too
reg my_mux;
always @(or or c)
begin
  
if(a)
my_mux b;
  else
my_mux c;
end 

3. Bits concatenation

PHP Code:
wire [7:0my_bus = {2'b01, 4'hF1'b1, 1'b0};
wire this_signal_is_true = (my_bus==8'b01111110);

<strong>4. Bits replication</strong>
[code]wire [7:0] my_bus = {4{2'
b01}};
wire this_signal_is_true = (my_bus==8'b01010101); 

5. Testbench

PHP Code:
reg clk;

initial// clock generation
begin
  clk 
0;
  
forever #10 clk = ~clk;
end

initial
begin
@(posedge clk);
while(
value==0) @(posedge clk);
repeat(100) @(posedge clk);

$stop;
$finish;
end 

Nguồn: You are not allowed to view links. Register or Login to view.


website: www.eplusi.net
Phone: 0907 042 549
Mail: info@eplusi.net
Trả lời


Đi tới chuyên mục:


Thành viên đang xem chủ đề: 1 Khách