网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月10日漏签0天
logisim吧 关注:315贴子:978
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 7回复贴,共1页
<<返回logisim吧
>0< 加载中...

写了一个生成 ROM 数据的程序

  • 取消只看楼主
  • 收藏

  • 回复
  • ZXP4
  • 童生
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • ZXP4
  • 童生
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
代码:https://github.com/ZXPrism/Snippets/blob/main/src/mkrom.py


2025-05-10 10:50:01
广告
  • 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
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回logisim吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示