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

简单的独热码转换

代码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

综合结果
在这里插入图片描述
提高位宽

`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

综合结果
在这里插入图片描述
位宽对综合结果无影响

代码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

综合结果
通过qurtus ii查看综合后电路

代码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

综合结果
在这里插入图片描述

参数化设计

`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

在这里插入图片描述
这种方法应该是趋于完美的写法,资源耗费较少

仿真效果图

在这里插入图片描述
在这里插入图片描述

尝试

在这里插入图片描述
根据推断,独热码转换应该是如下情况

`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

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

如果各位有更好的方法可以直接留言

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
RFC文档目录 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob Kahn 会话 RFC10 文档规范 RFC13 零文本长度的EOF信息 RFC16 M.I.T RFC18 IMP-IMP和主机-主机控制联接 RFC19_可用来降低有限交换节点阻塞的两条协议性的建议 RFC20_用于网络交换的 ASCII 格式 RFC21 网络会议 RFC22 主机-主机控制信息格式 RFC23_多重传送的调节信息 RFC24 文档规范 RFC25 不使用高的连接号 RFC27 文档规范 RFC28 时间标准 RFC29 响应 RFC 28 RFC30 文档规范 RFC32 关于SRI所提议的实时时钟的一些想法 RFC34 关于ARC时钟的一些初步记录摘要 RFC35 网络会议 RFC36 协议注解 RFC37 网络会议结尾等 RFC38 NWG/RFC #36 网络协议的注解 RFC40 关于未来协议的更多注解 RFC41 IMP-IMP 通讯信息 RFC42 信息数据类型 RFC43 被提议的会议 RFC45 关于未来协议的更多注解 RFC53 官方协议机构 RFC58 逻辑信息同步 RFC60 简单的 NCP 协议 RFC63 迟来的网络会议报告 RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND RFC79 圆木协议错误 RFC81 涉及信息的请求 RFC84 NWG/RFC的1-80列表 RFC85 网络工作组会议 RFC90 CCN 作为一种网络服务中心 RFC99 网络会议 RFC101 对1971年2月17日伊利诺斯州的Urbana的网络工作组会议的注释 RFC102 主机-主机 协议故障清除委员会的说明 RFC103 中断键的执行 RFC104 连接 191 RFC105 通过 UCSB 进行远程登录和远程输出返回的网络说明书 RFC106 用户/服务器 站点协议的网络主机问卷 RFC107 主机-主机 协议故障清除委员会的说明 RFC108 1971年2月17-19日在 Urbana 举行的 NWG 会议的人员列表 RFC124 在 RFC 107 中有印刷错误 RFC132 RFC 107 的排版错误 RFC148 RFC 123 的注释 RFC149 最好的铺设计划 RFC154 风格显示 RFC156 伊利诺斯州站点的状态: 响应 RFC 116 RFC179 连接的数字分配 RFC185 NIC 分发手册 RFC188 数据管理会议公告 RFC198 站点证明-林肯实验室 360/67 RFC204_利用报路 RFC218 改变 IMP 状态报告设备 RFC228 澄清 RFC232 网络图形会议延缓 RFC245 预定网络工作组会议 RFC246 网络图形会议 RFC256 IMPSYS 变更通知 RFC276 NIC过程 RFC285 网络图形 RFC324 RJE 协议会议 RFC335 新界面 - IMP/360 RFC348_放弃过程 RFC404 文件迁移协议的注释 RFC405 给 TIP 用户的第二封信 RFC456 UCSB 的数据重置服务 RFC457_FTP 的服务器与服务器交互 RFC496 IMP/TIP 内存更新时间表(修订版 2) RFC516 丢失消息的检测 RFC591 在 NVT ASCII UCSB和在线系统之间的实验输入映象 RFC621 “注意圣诞节的时候要把长袜挂在烟囱下面” RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697_FTP的CWD命令 RFC698_Telnet扩展ASCII选项 RFC763 角色邮箱 RFC775_面向目录的 FTP 命令 RFC779_Telnet发送-位置选项 RFC792_Internet 控制信息协议 RFC797 位图文件格式 RFC821_简单邮件传输协议 RFC826_以太网地址换协议或换网络协议地址 RFC827_Exterior 网关 协议 (EGP) RFC854_Telnet协议说明书 RF
目 录 第1章 C语言 8 1.1 什么是局部程序块(local block)? 8 1.2 可以把变量保存在局部程序块中吗? 9 1.3 什么时候用一条switch语句比用多条if语句更好? 9 1.4 switch语句必须包含default分支吗? 10 1.5 switch语句的最后一个分支可以不要break语句吗? 11 1.6 除了在for语句中之外,在哪些情况下还要使用逗号运算符? 11 1.7 怎样才能知道循环是否提前结束了? 13 1.8 goto,longjmp()和setjmp()之间有什么区别? 13 1.9 什么是左值(lvaule)? 15 1.10 数组(array)可以是左值吗? 15 1.11 什么是右值(rvaule)? 16 1.12 运算符的优先级总能保证是“自左至右”或“自右至左”的顺序吗? 17 1.13 ++var和var++有什么区别? 17 1.14 取模运算符(modulus operator)“%”的作用是什么? 17 第2章 变量和数据存储 18 2.1. 变量存储在内存(memory)中的什么地方? 18 2.2. 变量必须初始化吗? 19 2.3. 什么是页抖动(pagethrashing)? 19 2.4. 什么是const指针? 20 2.5. 什么时候应该使用register修饰符?它真的有用吗? 21 2.6. 什么时候应该使用volatile修饰符? 21 2.7. 一个变量可以同时被说明为const和volatile吗? 22 2.8. 什么时候应该使用const修饰符? 23 2.9. 浮点数比较(floating-point comparisons)的可靠性如何? 23 2.10. 怎样判断一个数字型变量可以容纳的最大值? 24 2.11. 对不同类型的变量进行算术运算会有问题吗? 25 2.12. 什么是运算符升级(operatorpromotion)? 25 2.13. 什么时候应该使用类型强制换(typecast)? 26 2.14. 什么时候不应该使用类型强制换(typecast)? 27 2.15. 可以在头文件中说明或定义变量吗? 27 2.16. 说明一个变量和定义一个变量有什么区别? 27 2.17. 可以在头文件中说明static变量吗? 28 2.18. 用const说明常量有什么好处? 28 第3章 排序与查找 28 排序 28 查找 29 排序或查找性能? 30 3.1. 哪一种排序方法最方便? 32 3.2. 哪一种排序方法最快? 33 3.3. 对外存(磁盘或磁带)中而不是内存中的数据进行排序称为外部排序。 39 3.4. 1哪一种查找方法最方便? 44 3.5. 1哪一种查找方法最快? 46 3.6. 1什么是哈希查找? 51 3.7. 1怎样对链表进行排序? 53 3.8. 1怎样查找链表中的数据? 53 第4章 数据文件 59 4.1. 当errno为一个非零值时,是否有错误发生? 59 4.2. 什么是流(stream)? 59 4.3. 怎样重定向一个标准流? 60 4.4. 怎样恢复一个重定向了的标准流? 60 4.5. stdout能被强制打印到非屏幕设备上吗? 61 4.6. 文本模式(textmode)和二进制模式(binarymode)有什么区别? 61 4.7. 怎样判断是使用流函数还是使用低级函数? 62 4.8. 怎样列出某个目录下的文件? 62 4.9. 怎样列出一个文件的日期和时间? 63 4.10. 怎样对某个目录下的文件名进行排序? 66 4.11. 怎样判断一个文件的属性? 67 4.12. 怎样查看PATH环境变量? 69 4.13. 怎样打开一个同时能被其它程序修改的文件? 69 4.14. 怎样确保只有你的程序能存取一个文件? 71 4.15. 怎样防止其它程序修改你正在修改的那部分文件内容? 71 4.16. 怎样一次打开20个以上的文件? 72 4.17. 怎样避开"Abort,Retry,Fail”消息? 72 4.18. 怎样读写以逗号分界的本? 74 第5章 编译预处理 76 5.1. 什么是宏(macro)?怎样使用宏? 76 5.2. 预处理程序(preprocessor)有什么作用? 77 5.3. 怎样避免多次包含同一个头文件? 79 5.4. 可以用#include指令包含类型名不是".h"的文件吗? 80 5.5. 用#define指令说明常量有什么好处? 80 5.6. 用enum关键字说明常量有什么好处? 81 5.7. 与用#define指令说明常量相比,用enum关键字说明常量有什么好处? 81 5.8. 如何使部分程序在

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值