Verliog语法(更多verliog功能)

Conditional ternary opertor(条件运算符)

module top_module (
    input [7:0] a, b, c, d,
    output [7:0] min);//
    wire [7:0]abmax,cdmax;
    assign abmax = a<b? a: b;
    assign cdmax = c<d? c: d;
    assign min = abmax<cdmax? abmax: cdmax;
endmodule

Reduction opertors(归约运算符)

module top_module (
    input [7:0] in,
    output parity); 
    
    assign parity= ^in;
    
endmodule

Reduction  :even wider gates

module top_module( 
    input [99:0] in,
    output out_and,
    output out_or,
    output out_xor 
);
	assign out_and=&in;
    assign out_or=|in;
    assign out_xor=^in;
endmodule

Combinition for loop:vector reversal 2(for循环组合:向量反转2)

module top_module( 
    input [99:0] in,
    output [99:0] out
);
    integer i;
    always@(*)
        begin
            for(i=0;i<100;i=i+1'b1)
                begin
                    out[99-i]=in[i];
                end
        end
endmodule

Combinition for loop:255 bit population count(for循环组合:255位人口计数器)

module top_module( 
    input [254:0] in,
    output [7:0] out );
	integer i;
    always@(*)
        begin
            out=8'b0000_0000;
            for(i=0;i<255;i=i+1'b1)
                begin
                    if(in[i]==1'b1)
                    out=out+1'b1;
                    else
                    out=out;
                end
        end
endmodule

Generate for loop:100 bit binary adder 2( generate for循环组合:100位二进制加法器)

generate功能块主要用于循环,相对于for循环,generate for循环能够例化模块等。

主要注意有:(1)循环变量需要用genvar定义,只能在generate功能块中使用

                      (2)for后必须有begin....end,begin:名字(类似于模块名)

                      (3)里面语句需要加关键字如:assign,xor...

module top_module( 
    input [99:0] a, b,
    input cin,
    output [99:0] cout,
    output [99:0] sum );
	genvar i;
    generate 
            for(i=0;i<100;i=i+1'b1)
                begin: aaa
                    if(i==0)
                      assign  {cout[i],sum[i]}=a[i]+b[i]+cin;
                    else   
                      assign  {cout[i],sum[i]}=a[i]+b[i]+cout[i-1];
                end
    endgenerate
endmodule

Generate for loop:100-digit BCD adder(for循环组合:100位二进制加法器)

小技巧:寄存器部分选择可以通过最低位   +:(选择位数)方式

module top_module( 
    input [399:0] a, b,
    input cin,
    output cout,
    output [399:0] sum );
    wire [99:0]jinwei;
    genvar i;
    generate 
            for(i=0;i<100;i=i+1'b1)
                begin: aaa
                    if(i==0)
                        bcd_fadd b1(.a(a[i*4+:4]),.b(b[i*4+:4]),.cin(cin),.cout(jinwei[i]),.sum(sum[i*4+:4]) );
                    else
                      bcd_fadd b2(.a(a[i*4+:4]),.b(b[i*4+:4]),.cin(jinwei[i-1]),.cout(jinwei[i]),.sum(sum[i*4+:4]) );
                end
    endgenerate
    assign cout=jinwei[99];
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值