首页 > 其他分享 >chisel安装和使用+联合体union的tagged属性+sv读取文件和显示+sv获取系统时间+vcs编译时改动parameter的值+tree-PLRU和bit-PLRU

chisel安装和使用+联合体union的tagged属性+sv读取文件和显示+sv获取系统时间+vcs编译时改动parameter的值+tree-PLRU和bit-PLRU

时间:2023-10-05 21:33:08浏览次数:55  
标签:tagged PLRU scala union sv io hello

chisel安装和使用

sbt:scala build tool,是scala的默认构建工具,配置文件是build.sbt。
mill:一个新的java/scala构建工具,运行较快,与sbt可以共存,配置文件是build.sc。

chisel的安装可以参考这篇文章。安装过程务必联网,而没有联网情况下的安装,按照其它的说明,如移动缓存文件等,并无法正常使用。
https://zhuanlan.zhihu.com/p/357342948


scala这门语言一方面用的人并不多,另一方面敏捷开发本身有点和传统芯片设计有点相悖,加之不同的scala版本库差异很大,学习难度、成本、资料、迁移性、环境搭建等并不顺畅,所以我觉得还是不要学这种东西好些。

如果是出于位宽,连接等基本语法容易错误的问题,那么EDA工具自带了各种APP,可以扫描RTL。
如果是出于架构设计的问题,那么前期把方案完整做好,则后期书写代码是更为清晰。


安装完毕建立工程,以下是测试代码。
in_a宽度是2,in_b的宽度是1。加到的结果的宽度是3。

import chisel3._
import chisel3.Driver

class hello extends Module{
  var io = IO(new Bundle() {
    var in_a = Input(UInt(2.W))
    var in_b = Input(UInt(1.W))
    var out = Output(UInt(3.W))
  })
  io.out := io.in_a + io.in_b
}

object hello extends App{
  Driver.emitVerilog(new hello())
}

有如下生成的verilog代码:
in_b的宽度是1,in_a宽度是2,out宽度是3。

module hello(
  input        clock,
  input        reset,
  input  [1:0] io_in_a,
  input        io_in_b,
  output [2:0] io_out
);
  wire [1:0] _GEN_0 = {{1'd0}, io_in_b}; // @[hello.scala 10:21]
  wire [1:0] _T_1 = io_in_a + _GEN_0; // @[hello.scala 10:21]
  assign io_out = {{1'd0}, _T_1}; // @[hello.scala 10:21]
endmodule

联合体union的tagged属性

https://www.elecfans.com/d/1922920.html

tagged union包含一个隐式成员,该成员存储tag,也就是标记,它表示这个union最终存储的到底是哪一个成员。

如果从不同的union成员中读取值,仿真器则会报错:

module tagged_union_example;
	logic [31:0] x;
	typedef union tagged {
		int a;
		byte b;
		bit [15:0] c;
	} data;

	data d1;
	initial begin
		d1 = tagged a 32'hffff_ffff; //write to 'a'
		//read from 'b'. Since 'a' was written last, cannot access
		//'b'. - Error
		x = d1.b;
		$display("x = %h",x);
	end
endmodule

所以,tagged其实是属性检查的作用,在实际的应用中不多。
另外,union的实际用途不明:
在编译和仿真的时候,即便是unpacked union,也会出现数值完全覆盖的情况,
似乎是被当做packed联合体使用了。

应该尽量避免unpacked联合体使用,防止出现意外。

sv读取文件和显示

https://blog.eetop.cn/blog-12852-21369.html


integer file;
string  variable;
reg [31:0] value;

file=$fopen("file.txt","r");
while(!$feof(file))
begin
    $fscanf(file,"%s %h",variable,value);
    h_array[variable] = value;
end
$fclose(file);

sv获取系统时间

以下命令提取不到值:

initial begin
    $system("date");
end

用DPI方法可以提取到值,但是是一个格式化的字符串:

#include <time.h> 
wallclock() { 
    time_t t; 
    t = time(NULL); 
    return (ctime(&t)); 
    //return time(NULL); 
} 

import "DPI-C" function string wallclock(); 

module try; 

    //int unsigned t; 
    string t; 

    initial begin 
     t = wallclock(); 
     $write("time=%0s\n", t); 
    end 
endmodule 

如果需要更详细的自定义的时钟,那么可以先打通C语言的获取,然后再用SV调用。注意调用的格式正确性,而EDA工具有时候并不检查import等形参、返回值的正确性。

https://www.runoob.com/w3cnote/c-time-func-summary.html

vcs编译时改动parameter的值

vcs手册提供两种方案,一种是-pvalue+value_path=value的方法,另一种是-parameters filename的方法。
以第一种方法为例:

module module_name();
  	parameter a= 3;
    initial begin
      	#10;
      	$display("%0d", a)
    end
endmodule

编译时候添加了如下,则输出的a是1.

-pvalue+module_name.a=1

tree-PLRU和bit-PLRU

tree-PLRU

https://en.wikipedia.org/wiki/Pseudo-LRU
2bit的索引,从00-11一直循环,下一轮访问的被替换。
每次访问过的位置,1变成0,0变成1,将最旧的数据被替换。 如果访问顺序是C, B, D, A, 那么下图中,E替换的位置是B,而不是C。这是因为A和C都在相同的一半,DBD访问后,所有值重新变成0,而最后一次访问A,将算法替换位置定向到C。

填充过程的数值变化:
0指向左边,填充以后变成1指向右边。1指向右边,填充以后变成0指向左边。

访问过程的数值变化:
访问过程的路径如果是和原值相同,则变换数值指向另一方。如果和原值不同,则不变。

image

bit-PLRU

每个条目上有1bitLRU值,每次访问设置这个值,满了以后变成全0,替换时候选择最左边为0的那个条目替换。

标签:tagged,PLRU,scala,union,sv,io,hello
From: https://www.cnblogs.com/bai2022/p/17743948.html

相关文章

  • 感性理解梯度下降 GD、随机梯度下降 SGD 和 SVRG
    MLTheory太魔怔了!!!!!从微积分课上我们学到对一个\(\mathscrC^2\)函数,其二阶泰勒展开的皮亚诺余项形式\[f(\bmw')=f(\bmw)+\langle\nablaf(\bmw),\bmw'-\bmw\rangle+o(\|\bmw'-\bmw\|)\]这说明只要\(\bmw'\)和\(\bmw\)挨得足够接近,我们就可......
  • 2023-10-05 "code":"40006",msg"."Insufficient Permissions", ISV权限不
    1.登录支付宝开放平台https://open.alipay.com/2.找到控制台==》产品绑定,如下图: 我这里虽然已经绑定了,但是还没签约,意思就是还没开通app支付;3.点击去开通。 ......
  • 基于HSV空间的彩色图像分割技术
    1.引言每当我们看到图像时,它通常都是由各种元素和目标组成的。在某些情况下,我们可能会想要从图像中提取某个特定的对象,大家会怎么做?首先我们会想到的是进行crop相关的操作,这在某种程度上是可行的,但是这通常也会有一些不相关的像素会被包括在内,我确信大多情况下我们不希望这样。事......
  • SVG标签
    SVG有一些预定义的形状元素矩形<rect>圆形<circle>椭圆<ellipse>线<line>折线<polyline>多边形<polygon>路径<path>矩形-<rect><svgwidth="400"height="180"><rectx="50"y="2......
  • ImageNet数据集(ILSVRC2012)分析
    ImageNet数据集(ILSVRC2012)获取方法:首先,需要有一个edu的邮箱,因为该数据集只提供给高校科研工作者。然后,使用edu邮箱注册一个账号,获得的邮件通知,需要验证以后登录,进入下载链接即可下载。官网下载链接:https://image-net.org/download-images.php本次下载内容:ImageNetLarge-scaleV......
  • 关于 VMware 虚拟机中的 SVGA II 虚拟设备
    VMwareSVGAII是VMware虚拟机中用于图形显示的虚拟显卡设备的一种。它是一种虚拟设备,专门为在虚拟机环境中提供图形支持而设计的。VMwareSVGAII虚拟设备的作用是模拟物理计算机上的图形适配器,允许虚拟机实例在虚拟化的环境中进行图形处理和显示。在本文中,我将详细解释VMwar......
  • 用sql语句查询出表结构,在结果就能看到数据库所有表的结构,这个时候只要全选,然后右击出
    SELECT表名=CaseWhenA.colorder=1ThenD.nameElse''End,表说明=CaseWhenA.colorder=1Thenisnull(F.value,'')Else''End,字段序号=A.colorder,字段名=A.name,字段说明=isnull(G.[value],......
  • CS231N Assignment1 SVM 笔记(更新中)
    svm.ipynb为SVM实现一个完全矢量化的损失函数为其解析梯度实现完全矢量化表达式使用数值梯度检查您的实现使用验证集调整学习率和正则化使用 SGD优化损失函数可视化最终学习权重第一部分1.一些配置和库的导入#Runsomesetupcodeforthisnotebook.importrand......
  • Python信贷风控模型:梯度提升Adaboost,XGBoost,SGD, GBOOST, SVC,随机森林, KNN预测金
    原文链接:http://tecdat.cn/?p=26184 原文出处:拓端数据部落公众号最近我们被客户要求撰写关于信贷风控模型的研究报告,包括一些图形和统计输出。在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出。本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法:  sim<-svsim(1000,mu=-9,phi=0.97,sigma......