最好的独热码与二进制转换

这篇具有很好参考价值的文章主要介绍了最好的独热码与二进制转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单的独热码转换

代码1

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 4
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
    always_comb begin 
        unique case(1'b1)
            one_hot_code[0]:bin_code = 'h0;
            one_hot_code[1]:bin_code = 'h1;
            one_hot_code[2]:bin_code = 'h2;
            one_hot_code[3]:bin_code = 'h3;
            default:bin_code = 'h0;
        endcase 
    end 
endmodule

综合结果
独热码转二进制码,硬件工程,fpga开发
提高位宽

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 8
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
    always_comb begin 
        unique case(1'b1)
            one_hot_code[0]:bin_code = 'h0;
            one_hot_code[1]:bin_code = 'h1;
            one_hot_code[2]:bin_code = 'h2;
            one_hot_code[3]:bin_code = 'h3;
            one_hot_code[4]:bin_code = 'h4;
            one_hot_code[5]:bin_code = 'h5;
            one_hot_code[6]:bin_code = 'h6;
            one_hot_code[7]:bin_code = 'h7;
            default:bin_code = 'h0;
        endcase 
    end 
endmodule

综合结果
独热码转二进制码,硬件工程,fpga开发
位宽对综合结果无影响

代码2

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 4
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
    always_comb begin 
        unique case(one_hot_code)
            4'b0001:bin_code = 'h0;
            4'b0010:bin_code = 'h1;
            4'b0100:bin_code = 'h2;
            4'b1000:bin_code = 'h3;
            default:bin_code = 'h0;
        endcase 
    end 
endmodule

综合结果
独热码转二进制码,硬件工程,fpga开发

代码3

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 8
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
	logic [$clog2(ONE_HOT_WIDTH)-1 : 0] temp [ONE_HOT_WIDTH-1 : 0];
		
	genvar i;
	generate
		for(i = 0; i < ONE_HOT_WIDTH; i = i+1)begin
			assign temp[i] = one_hot_code[i]? i:'b0;
		end
	endgenerate
	assign bin_code = temp[0] | temp[1] | temp[2] | temp[3] | temp[4] | temp[5] | temp[6] | temp[7];
	
endmodule

综合结果
独热码转二进制码,硬件工程,fpga开发

参数化设计

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 8
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
	logic [$clog2(ONE_HOT_WIDTH)-1 : 0] temp1 [ONE_HOT_WIDTH-1 : 0];
	logic [ONE_HOT_WIDTH-1 : 0] 			temp2 [$clog2(ONE_HOT_WIDTH)-1 : 0];
		
	genvar i,j,k;
	generate
		for(i = 0; i < ONE_HOT_WIDTH; i = i+1)begin : temp1_loop
			assign temp1[i] = one_hot_code[i]? i:'b0;
		end
	endgenerate
	generate
		for(i = 0; i < ONE_HOT_WIDTH; i = i+1)begin : temp_ch1
			for(j = 0; j < $clog2(ONE_HOT_WIDTH); j = j+1)begin  : temp_ch2
				assign temp2[j][i] = temp1[i][j];
			end
		end
	endgenerate
	generate
		for(j = 0; j < $clog2(ONE_HOT_WIDTH); j = j+1)begin : temp2_loop
			assign bin_code[j] = |temp2[j];
		end
	endgenerate
	
endmodule

独热码转二进制码,硬件工程,fpga开发
这种方法应该是趋于完美的写法,资源耗费较少

仿真效果图

独热码转二进制码,硬件工程,fpga开发
独热码转二进制码,硬件工程,fpga开发

尝试

独热码转二进制码,硬件工程,fpga开发
根据推断,独热码转换应该是如下情况

`timescale 1ns / 1ns
module test_q #(
           parameter  ONE_HOT_WIDTH    = 8
       )(
           input[ONE_HOT_WIDTH-1 : 0]               one_hot_code,
           output logic [$clog2(ONE_HOT_WIDTH)-1 : 0]      bin_code
       );
    //从1开始间隔1位
	bin_code[0] = one_hot_code[1] | one_hot_code[3] | one_hot_code[5] | one_hot_code[7];
    //从2开始间隔2位	
	bin_code[1] = one_hot_code[2] | one_hot_code[3] | one_hot_code[6] | one_hot_code[7];
    //从4开始间隔4位	
	bin_code[2] = one_hot_code[4] | one_hot_code[5] | one_hot_code[6] | one_hot_code[7];
    //从8开始间隔8位	
	//bin_code[3] = one_hot_code[4] | one_hot_code[5] | one_hot_code[6] | one_hot_code[7];
	
endmodule

如何参数化设计,目前没想到方法;

如果各位有更好的方法可以直接留言文章来源地址https://www.toymoban.com/news/detail-602733.html

到了这里,关于最好的独热码与二进制转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制

    题目描述 计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。 输入描述 输入一个十进制数。 输出描述 程序将输入的十进制数转换为二进制数,并输出其

    2024年02月07日
    浏览(79)
  • C++十进制与二进制之间的转换

    一般采用\\\"除2取余,逆序排列\\\"法: 也就是将一个十进制数不断除2,将每次得到的余数倒序从后向前排列。 拿求救信号6举个例子: 6/2=3……0  末位就是0 3/2=1……1   前一位就是1 1/2=0……1  再前一位就是1 再画个图辅助理解,这回试试100: 所以100的二进制表达就是1100100 那用

    2024年02月08日
    浏览(48)
  • 进制转换—包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2023年04月23日
    浏览(95)
  • 【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细

    目录 1.进制转换必备知识:         1.1 二进制逢2进1         8进制逢8进1           10进制逢10进1        16进制逢16进1         1.2为了区分二、八、十、十六进制,我们通常在数字后面加字母进行区分 2. 二进制与八进制、十六进制相互转换         2.1 二进制转

    2024年02月05日
    浏览(257)
  • PYTHON : 二进制 、 八进制 、十六进制的转换和输出

    十进制转换成其他进制 保存为文本串 二进制 bIn() 八进制 oct() 十六进制 hex() 不输出前缀 使用format函数 如果不想输出进制前面的 前缀符号 , 这时我们就要使用format函数 在这里我们要注意 , 二进制和八进制 的再format里的 符号是‘b’,‘o’ 而十六进制format 里的符

    2023年04月09日
    浏览(75)
  • 二进制与十进制数互相转换的方法及原理

    有人问我一道十进制数转化为二进制数的题:13.625转化为二进制应该如何表示。让我回忆起十多年前学编程时就搞不懂二进制,不找“不必求甚解”的借口,我搜索了一些平台,但很失望,这么多年过去了,能找到的资源依然和以前一样,只讲怎样操作,不提为什么这样操作

    2024年02月04日
    浏览(71)
  • 【Golang】二进制字符串转换为数字

     在本文中,我们将探讨如何使用 Go 语言将十六进制字符串转换为二进制字符串,将不定长整型补码字符串转换为数字,以及如何将 IEEE754 标准的单精度(32位)和双精度(64位)浮点数字符串转换为数字。最后,我们将讨论如何将布尔类型的二进制字符串转换为布尔值。 这

    2024年01月16日
    浏览(56)
  • Java 中图片与二进制之间如何相互转换?

    1、 下面是一个完整的代码示例。 指定文件路径转为二进制 将网络图片转为二进制 base64 转为图片资源 2、如何判断 base64 图片的格式? 3、将网络图片转为 base64 字符串 4、将 base64 字符串转为图片输出 注:该方法的入参,base64 格式文件不得有 文件头部标识信息,否则会转换

    2024年02月10日
    浏览(47)
  • FPGA自学之路12(二进制转换8421bcd码)

    如图所示,先看原理。1110_1010对应的十进制是3位,所以bcd码有12位。先12位bcd全部取0,然后二进制码左移一位,从个位开始判断是否大于4,不大于4继续左移。大于4就加3(0011),然后再左移一位,然后再进行判断,直至所有二进制码全部左移完。 框图如下 这里输入的二进制码

    2024年02月11日
    浏览(51)
  • java案例5-4 字符串转换为二进制

    本例要求编写一个程序,从键盘录入一个字符串,将字符串转换为二进制数。在转换时,将字符串中的每个字符单独转换为一个二进制数,将所有二进制数连接起来进行输出。 案例在实现时,要求使用Math类、String类以及Scanner等常见Java API的常用方法. 2.运行结果 学会分析“十

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包