保留最高为1的位,其他位置零,或者保留最低为1的位,其他位置零

利用补码的原理可以取出最低为1的位,其他位置零;
例如a=0101_1010,补码b=(~a+1)=1010_0110;
结果:c=a^b=0000_0010;

取最高位:
1、先取a的逆序a*;
2、c=(a*)^(~a*+1)
3、d=c*;对c取逆序
上代码:

`timescale 1ns/1ps
module highbit1();
    reg clk;
    reg rstn;
    parameter perd = 20;

    reg [5:0] din;
    reg [5:0] dout_up;
    reg [5:0] dout_down;

    wire [5:0] dout_up_r;
    reg [5:0] temp;
    initial begin
        rstn=1;
        clk=1;
        #20 rstn =0;
        #20 rstn =1;
    end

    always #(perd/2) clk =~clk;

always @(posedge clk or rstn) begin
    if(~rstn) begin
        din<='b00000;
    end
    else begin
        din<=$urandom%(1<<6);
    end

end



integer i;
always @(*) begin
    for (i=0;i<=5;i=i+1)
        temp[i]=din[5-i];
end

assign dout_up_r = temp&(~temp+1'b1);
//assign dout_down = din&(~din+1'b1);

always @(*) begin
    for (i=0;i<=5;i=i+1)
        dout_up[i]=dout_up_r[5-i];
end
always @(*) begin
    dout_down = din&(~din+1'b1);
end

endmodule

测试结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值