网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月03日
漏签
0
天
logisim吧
关注:
310
贴子:
973
看贴
图片
吧主推荐
游戏
7
回复贴,共
1
页
<<返回logisim吧
>0< 加载中...
写了一个生成 ROM 数据的程序
只看楼主
收藏
回复
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
代码:
https://github.com/ZXPrism/Snippets/blob/main/src/mkrom.py
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
最近在做 CS61C 的 project 3 (实现一个简单的二级流水线 RV32I 指令集 CPU) ,其中需要用到 ROM 来实现 CPU 的 control logic。因为一个个手敲实在太麻烦,所以我就想能不能写个程序来简化这一流程
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
下面演示其功能。假设 ROM 的地址有 9 位,数据有 20 位(即镇楼图)。
首先构造两个比较好辨识的二进制数用于测试:
然后新建一个文本文档(名称随意),输入地址和数据之间的对应关系:
格式:[地址] [数据] #[注释,可选],每部分之间必须至少加一个空格
特性:
① 支持在行末用 "#" 添加单行注释。
② 地址和数据内的 "-" 是方便阅读的分隔符,在解析时会自动忽略。
③ "x" 或 "X" 为通配符,代表匹配 0 或 1,比如 X0X 对应 000、001、100、101。
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
最后执行程序(第一个参数是地址位数,第二个参数是数据位数,第三个参数是规则文件的路径):
生成 rom.txt:
右击 ROM,用 "Load Image..." 导入即可,格式选择 "v3.0 hex words plain"
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
因为程序是按行的先后顺序处理规则文件的,如果地址之间存在重叠,那么后写入的数据会覆盖先前的数据。
未赋值的地址统一填 0,不过实际上填什么都可以,类似真值表里面的 "x"。
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
添加了新特性:跳过空行 + 单行纯注释。之前仅支持在地址-数据之后附加注释。
(虽然这是本来就应该要有的 feature)
ZXP4
童生
2
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
另外,如果 ROM 数据的位数不是 4 的倍数(如 21 位),则我的程序会将位数自动 pad 到 4 的整倍数(如 21 -> 24)。事实上,如果你导出 ROM 的数据就会发现,logisim 正是这么做的。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示