【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!

简介: 【端午趣味征文】有vcs和python吗?来,我教你在波形里画个粽子!

前言

不务正业的我又开始整活啦,先祝福各位帅哥美女:

这次整个什么活呢~之前不是已经能在波形里写字了嘛,那么咱们进一步的在波形里画个粽子吧!

这次还是要用到之前的环境:

|献上祝福语波形生成器|

当然了,其实这个环境不是必须的,只有你有一个可以仿真出波形的sv环境,那么就ok啦!

分步实操

找到粽子

要想在波形里画粽子,你总得有个粽子的图,鉴于波形的表达能力太有限了,所以建议找个简笔画粽子来~比如说这个粽子.jpg:

于是呢,我们就有了原始的素材:一个甜粽!

转换01点阵

在转换01点阵图之前呢,要先把图像压缩一下,要把高度压缩到32个像素(原因后面聊),宽度可以大一些,但是也别太大。所以压缩后的粽子大概是这样的:

针对这个小粽子转点阵。由于波形里1bit信号只有时钟状态:0/1/x/z,其中xz又不是特别好传递,因此我们最好使用只有01的点阵图。把jpg图像转换为01点阵图,通过python非常容易实现,大概30行代码:

1. #-*-coding:gb2312-*-
2. 
3. import sys
4. import os
5. import re
6. import matplotlib.pyplot as plt
7. import cv2
8. import numpy as np
9. 
10. def main():
11.   img_path = r"D:\MyWork\python\zongzi1.jpg"
12.   img_data = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) #只读取灰度,不读取色彩
13.   img_data = np.transpose(img_data) #转置一下
14. 
15.   tmp_list = [] 
16.   for row in img_data:
17.     for i in row:
18.       if int(i) >= 240: #0~255,纯白色为255,设置一个阈值归一化为0/1
19.         tmp_list.append("0")
20.       else:
21.         tmp_list.append("1")
22.     tmp_list.append("\n")
23. 
24.   with open("gogogo.txt", "w") as f:
25.     for tr in tmp_list:
26.       f.write(tr)
27. pass
28. 
29. if __name__ == '__main__':
30.   main()

最后得到的点阵图长这样:

注意,这个粽子必须得是躺下的才行,因为后面环境里是一行一行的吃数据,然后转成32bit的信号,展开后就又称竖着的了~~

环境处理点阵图

接下来就是用前面提到的那个环境啦,当然不用也没关系,只要知道如何吃点阵图进仿真环境就可以了。把生成的点阵图命名为gogogo.cfg,放在了script/目录下,然后在环境里这样写:

1.     integer file;
2.     file = $fopen("../script/gogogo.cfg","r");
3.     while(!$feof(file))begin
4.         bit[32-1:0] value;
5.         $fscanf(file, "%b\n", value);
6.         `uvm_do_with(my_tr, {my_tr.gogogo == local::value;})
7.     end

这样就成功的把01点阵数据复制到my_tr.gogogo这个信号上去了。如果想话两个粽子怎么办呢?简单的很,就是把这段话复制一下,再生成一次就可以啦。

回过头看前面的一个问题,为啥高度(也就是后面环境处理时一个value的位宽)不能超过32bit呢?这个是我实践出真知,不知道是否和integer file指针有关或者和工具系统什么有关,如果超过32bit数据就吃的有问题,而且不止我这里出过这个问题,别人也反馈过类似的情况。所以我们就老老实实的画高度为32个像素点的粽子吧!

但是呢这样生成的粽子不够红火,怎么办呢?只要应用波形中x是红色的,z是黄色的这个特性,在driver中做这么一步操作:

this.vif.drv.gogogo<= 32'hxxxx_xxxx & pkt.gogogo;

在xprop = vmerge情况下,x & 1 = x,x & 0 = 0,所以最后我们就得到了两个红红火火的甜粽子!


相关文章
猿创征文|Python迭代器、生成器、装饰器、函数闭包
猿创征文|Python迭代器、生成器、装饰器、函数闭包
157 0
猿创征文|Python迭代器、生成器、装饰器、函数闭包
猿创征文|Python基础——Visual Studio版本——Web开发
猿创征文|Python基础——Visual Studio版本——Web开发
249 0
猿创征文|Python基础——Visual Studio版本——Web开发
猿创征文|Python基础——Visual Studio版本——第六章 MySQL操作
猿创征文|Python基础——Visual Studio版本——第六章 MySQL操作
133 0
猿创征文|Python基础——Visual Studio版本——第六章 MySQL操作
猿创征文|Python基础——Visual Studio版本——第五章 文件I/O
猿创征文|Python基础——Visual Studio版本——第五章 文件I/O
148 0
猿创征文|Python基础——Visual Studio版本——第五章 文件I/O
猿创征文|时间序列分析算法之二次指数平滑法和三次指数平滑法详解+Python代码实现
猿创征文|时间序列分析算法之二次指数平滑法和三次指数平滑法详解+Python代码实现
1982 0
猿创征文|时间序列分析算法之二次指数平滑法和三次指数平滑法详解+Python代码实现
猿创征文|python gevent 执行MySQLdb/mysqlclient连接卡住解决方案
猿创征文|python gevent 执行MySQLdb/mysqlclient连接卡住解决方案
359 0
猿创征文|python gevent 执行MySQLdb/mysqlclient连接卡住解决方案
猿创征文|Python基础——Visual Studio版本——DBHelper-MySQL版本
猿创征文|Python基础——Visual Studio版本——DBHelper-MySQL版本
135 0
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等