自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(98)
  • 资源 (11)
  • 收藏
  • 关注

原创 使用set_actions过滤掉特定的SystemC Wraning &Error Message

替换代码如下,其中,sc_core::SC_ID_SIMULATION_START_UNEXPECTED_ 这个宏 就是E554的 string描述 : sc_start called unexpectedly。不使用 sc_core::sc_gen_unique_name 情况下,systemc 会自动给 module的不同实例的name赋值,第一个 被例化的实例 name 就是 用户定义的your_name,第二个实例的name会被赋值为 your_name_0,依次类推。

2022-09-14 20:59:01 389 1

原创 blocking & non-blocking transport之间的相互转换

(实际执行的是 tlm_utils/simple_target_socket.h中的 b_transport函数 )的时候,我们发现 b_transport函数中有如下的逻辑,可以得知,m_b_transport_ptr 是空指针,m_nb_transport_ptr是有指向的,此时进行 b2nb 的转换,simple_target_socket.h中的b2nb_thread() 是用于 b2nb转换的sc_thread。如果使用的是诸如AXI之类的其他接口协议,则不能。...

2022-08-25 22:27:33 592

原创 sc_semaphore

sc_semaphore的构造函数中需要给定一个初始的semaphore value ( int,必须配置为大于等于0的值 )。wait() 和trywait() 函数用来申请资源,如果成功则value -- (前提是当前value > 0),trywait()会返回0;如果此时value == 0,则申请失败,wait()函数会被block住,等待其他process调用post()让value > 0;post() 函数用来 释放资源,++value,notify等待的process。

2022-08-24 21:39:43 349

原创 std::mutex & sc_core::sc_mutex

调用lock时,如果mutex处于lock状态,说明其他线程正在使用,则此线程需要等待,直到使用的那个线程调用了unlock,让mutex处于unlock状态后,本线程等待结束,调用lock成功。否则执行lock的动作,返回true。需要注意的是,调用unlock的前提必须是当前thread调用了lock或try_lock使mutex处于lock状态,否则将会导致不可预知的问题。如果当前mutex是lock状态,但是由其他process 执行的lock/ try_lock导致的,则返回-1;

2022-08-24 21:37:56 309

原创 sc_signal / sc_in / sc_out

其中,sc_out 和sc_inout 提供了write 和read 的API,而sc_in只提供了read的API,这些API中,会访问 与之绑定的sc_interface的read/write 函数,比如与sc_signal绑定时,访问的就是sc_signal的read/write 函数。sc_clock / sc_signal / sc_fifo / sc_mutex / sc_event_queue / sc_semaphore 都属于sc_interface 的子类。

2022-08-24 21:36:13 1124

原创 systemC/TLM:peq_with_cb_and_phase的简单用法

构造函数中的OWNER*一般设置为this,参数cb是一个callback function的指针,这个callback函数的形式为void (OWNER::*cb)(tlm_payload_type&, const tlm_phase_type&);peq有peq_with_get 和peq_with_cb_and_phase (cb是callback的简称) 两种形式。peq_with_cb_and_phase是一个模板类,两个模板参数,其中第二个默认为 tlm phase;

2022-08-24 21:27:58 513

原创 SystemC/TLM: blocking & non-blocking transport

tlm_core/tlm_2/tlm_generic_payload/tlm_phase.h 中定义了四种最基本的phase : BEGIN_REQ=1, END_REQ, BEGIN_RESP, END_RESP。比如要模拟AXI 协议的5个channel,则可以新增 BEGIN_ { AXI_AW / AXI_AR / AXI_W / AXI_R / AXI_B } 和 END_ { AXI_AW / AXI_AR / AXI_W / AXI_R / AXI_B } 这 10个phase。

2022-08-24 21:22:07 1625

原创 使用set_handler过滤掉特定的SystemC Wraning &Error Message

SystemC 定义了一些 warning 和error的场景,这些场景在编译的时候是不会报错的,但在执行过程中会报出类似Error: (E554) sc_start called unexpectedly的错误,其中E表示Error,W表示warning,554为错误的编号,“sc_start called unexpectedly”为错误对应的message输出。在源码中搜 SC_DEFINE_MESSAGE 就可以查到所有定义的message信息,以及对应的错误编号。主要的文件有以下几个,文件名都以

2022-06-30 19:18:40 185

原创 AXI4 Channel signals

AW 和AR channel的 signal field 基本是相同的。SignalDescriptionAxID[x:0]Each transaction channel has its own transaction ID每个transaction的唯一标识,AW /AR / B / R channel 都有 ID signal对于一个read request,产生read data的模块,其产生的R ID 需要跟 收到的AR ID一致。Write request类似。AxADDR[x:0]A burs

2022-06-16 19:26:24 418

原创 AXI5 new feature: support atomic transaction

AXI (Advanced extensible Interface) 协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。当前最新为 AXI 5.0 (2020年)。AXI5 Spec download AMBAAXI5 的一个重要更新,就是增加了对atomic transaction (或称之为 atomic operation,原子操作)的支持。Atomic transact

2022-06-16 19:24:49 2284

原创 SystemC 实现round-robin仲裁

Round-robin(轮询)是一种常用的、也是最基本的仲裁策略(Arbitration),用在多进一出的mux结构中;其基本思路是 有一个last gnt id记录上一次的仲裁结果,下一次则先从last gnt id +1 处开始查询是否此input是否有申请仲裁,如果有则其获胜,如果其没有申请仲裁,则轮询下一个input,依次类推。Round-robin是一种非常公平的仲裁策略,可以保证每个input都有相同的概率获取到output的权利。但有些时候,某些request比较紧急,优先级较高,我们需要

2022-05-28 11:01:16 1062

原创 Interlaken protocol 学习笔记

Interlaken 协议 是一个(相对于PCIE来讲) 轻量级的跨chip 互联协议,部分内容是在SPI4.2协议基础上来的,由Cortina 和Cisco公司在2006年提出,目前最新的是 v1.2版本 (2008年)。官方文档有两份,名字和链接分别为:Interlaken Protocol Definition - A Joint Specification of Cortina Systems and Cisco Systems 和Interlaken Retransmit Extension Pr

2022-05-28 10:55:55 2212

原创 致SystemC初学者:第一个程序

// execute: // g++ -g -Wall -lsystemc -m64 -pthread main.cpp // -L/$(your systemc path)/lib-linux64 // -I/$(your systemc path)/include -I/$(your systemc path)/src/tlm_utils -o sim#include <sy..

2022-05-04 12:27:30 3720

原创 C++ 虚继承

参考 虚继承_饭_团的博客-CSDN博客_虚继承虚继承:主要解决棱形继承时,出现的内存访问冲突问题。声明格式:class 类名 :virtual 继承方式 类名继承方式可以缺省,缺省之后默认继承方式为 private 私有继承。注意,代码中class D的初始化列表顺序需要为A ->B -> C,也就是实际执行时,构造函数的调用顺序。#include <iostream>#include <string>using namespace st...

2022-05-02 21:49:01 960

原创 sc_port / sc_interface / sc_export (part 4)

总结允许的绑定关系:sc_port.bind(sc_port)sc_port.bind(sc_interface)sc_port.bind(sc_export)sc_export.bind(sc_export)sc_export.bind(sc_interface)不允许的绑定关系:sc_export.bind(sc_port)sc_interface.bind(sc_interface)sc_interface.bind(sc_port)sc_interfa

2022-05-02 21:44:58 1027

原创 sc_port / sc_interface / sc_export (part 3)

sc_exportsc_export的一个主要作用是,在层次化的绑定过程中,给submodule内的interface提供了一个可以对外与sc_port绑定的方法。Class sc_export allows a module to provide an interface to its parent module. An export forwards interface method calls to the channel to which the export is bound.sc_e

2022-05-02 21:40:55 638

原创 sc_port / sc_interface / sc_export (part 2)

sc_port bindport 绑定时,有如下这两个函数,其中,operator()的实现需要通过调用虚成员函数bind来实现。函数参数可以为 interface,也可以是sc_export (如spec中的解释,其实是调用了 隐式类型转换sc_export<IF>::operator IF&)。void operator() ( IF& );virtual void bind( IF& );Each of these two functions sha

2022-05-02 21:37:34 829

原创 sc_port / sc_interface / sc_export (part 1)

一个复杂的系统我们一般会将其分为很多个比较小的模块,对于SystemC建模,每个模块一般就是一个sc_module的子类。模块间有一些交互的信息 一般通过 port/interface/channel/export 来进行传递,传递的过程其实本质上就是调用了对方的接口函数(通过operator-> 和operator[] 来实现)。也就是说,port的主要作用是 做到了解耦,比如,Module A 和Module B通过port这套方法在顶层进行了bind,那么Module A本身不需要看到Modul

2022-05-02 21:35:05 993

原创 SystemC/TLM: sc_fifo 的简单使用

sc_core::sc_fifo可以设置深度,默认深度为16。 explicit sc_fifo( int size_ = 16 ) : sc_prim_channel( sc_gen_unique_name( "fifo" ) ), m_data_read_event( sc_event::kernel_event, "read_event" ), m_data_written_event( sc_event::kernel_event, "writ

2022-05-01 11:59:10 1758

原创 SystemC/TLM: sc_vector

因为sc_module没有默认构造函数(有一个不带默认值的参数name),所以不能直接使用std::vector来定义一个sc_module 子类 的数组。为了方便定义一个sc_module 子类 的数组,sc_vector就应用而生了。如果子类只有一个name的参数,则初始化的时候直接init (num)就行了,但如果子类包含除name外的其他参数,此时就需要自己创建一个 create 函数,将函数指针传作为int函数的第2个参数。// execute: // g++ -g -W

2022-05-01 11:44:16 963

原创 sc_spawn / sc_pawn_options / sc_process_handle

sc_spawn ; sc_pawn_options; sc_process_handle ; sc_get_current_process_handle

2022-03-27 16:39:24 2034

原创 std::is_trivially_destructible

std::is_trivially_destructible来判断 一个 内置类型或structure/class/union类型 是否为 “容易销毁的(trivially destructible)”,从字面意思也可以看出,主要是check这个类型的 析构函数。官网给出如下解释:A trivially destructible class is a class (defined with class, struct or union) that:uses the implicitly define

2022-03-27 09:59:10 2594

原创 sc_port 和 sc_signal bind的一个奇怪用法

有些时候,我们会发现有这样的用法:A 模块定义了一个sc_port<sc_signal<bool> > m_port_in ; 且在 一个sc_thread 中 进行 readB 模块定义了一个 sc_signal<bool> m_signal ;且在 一个sc_thread 中 进行 write然后在顶层进行绑定 m_port_in.bind(m_signal)这跟我们常见的 信息传输方向 不太一样:常见的sc_port 一般作为 ini...

2022-03-27 09:56:52 975

原创 tlm::tlm_analysis_port & tlm::tlm_analysis_if

在SystemC/TLM建模中,我们经常需要加一些payload monitor来进行performance counter的统计,或者使用data checker来进行unit test。很多情况下,为了保持代码的整洁和提高仿真速度,我们不希望将monitor和checker的代码直接写在module内部。此时,就可以使用tlm提供的analysis port,然后根据需求来添加特定的monitor或checker。一个tlm::tlm_analysis_port可以绑定0个 /1个或多个tlm::tlm

2022-03-27 09:48:22 537

原创 SystemC: sc_bv and sc_uint

在SystemC model和RTL进行co-sim的时候,model中经常需要用到SystemC的sc_bv 类型数据与System Verilog代码进行交互。sc_bv 是 bit vector的简称,在namespace sc_dt (data types)中定义。sc_bv继承于sc_bv_base,sc_bv_base继承于sc_proxy<sc_bv_base>。sc_bv是一个模板类,定义时需要传入一个int参数,表示位宽。对sc_bv类型赋值,可以使用bool /

2022-03-27 09:45:19 1860

原创 SystemC中的Wait 函数

SystemC中SC_THREAD必须依靠wait 来进行仿真时间的推进;SC_METHOD中则必须保证不能出现任何显式或隐式的wait调用。wait 有多个重载函数。void wait() 中不加任何参数,表述wait此SC_THREAD的敏感列表事件,比如在构造函数中有这样的语句SC_THREAD( function); sensitive << evt; 这样在 SC_THREAD 的函数中 遇到wait() 就相当于wait(evt)。void wait(int n) 简单的

2022-02-27 21:43:26 2055

原创 SystemC:SC_THREAD和SC_METHOD

SC_THREAD / SC_METHOD都是spec中提到的processes,SC_CTHREAD很少使用,这里不太讨论。SC_THREAD / SC_METHOD本身是一个SystemC定义的宏,在源码中我们可以找到其对应的实际执行语句,其实就是将括号中对应的函数添加到SystemC kernel中的调度列表中。SC_THREAD / SC_METHOD必须在一个module的构造函数或before_end_of_elaboration / end_of_elaboration中使用。如果想在Si

2022-02-27 21:42:28 2742

原创 SystemC Simulation调度机制

默认情况下,我们直接使用源码中提供的CMake编译参数编译.so文件,那么我们在跑一个SystemC程序的时候,即使代码中有很多SC_THREAD / SC_METHOD的注册函数,也会发现程序只占用一个物理CPU core。如果我们在编译时 enable了SC_USE_PTHREADS这个宏,则会出现不同的现象:每一个SC_THREAD / SC_METHOD都会创建一个CPU线程;但这种情况对我们的仿真速度其实影响很大,当我们代码中的SC_THREAD / SC_METHOD特别多时,会严重拖慢我们

2022-02-27 21:41:16 1267 6

原创 SystemC time

首先要区分SystemC 仿真时间 和 机器执行时间,机器执行时间 是我们CPU物理机跑程序所花费的物理时间,这个时间就是我们真是感受到的时间,1s,1min … ;而SystemC 仿真时间是SystemC程序执行过程中kernel调度的时间,SystemC仿真时间跟物理执行时间没有任何粒度上的对应关系,比如一个程序,在SystemC 仿真时间 从0ns到 100 ns过程中花费了CPU物理时间为10s;并不能推算出从100ns到200ns过程中也需要花费10s的物理时间。对于1G Hz的silico

2022-02-27 21:40:07 1254

原创 SystemC的运行阶段

SystemC 运行阶段 elaboration

2022-02-27 21:37:53 989

原创 atomic and exclusive operation

原子操作(atomic operation)指的是由多步操作组成的一个操作,也就是一个指令包含了至少两步操作,比如自加操作( i++ ),就是先从内存读一个地址(步骤1 load),然后将数据自加1 (步骤2 ALU做加法运算),再写回内存(步骤3 store)。对同一个资源(比如访问DDR的一个相同地址)的原子操作处理过程中,不允许被打断。原子操作的正确实施必须由硬件逻辑来保证,一般在距离片外内存(DDR)较近的模块实施,比如NoC,LLC等,因为这样才能发挥原子操作的性能优势。比如在LLC中实施,那么

2021-10-31 21:27:50 795

原创 AXI4 Increase burst / wrap burst/ fix burst 和 narrow transfer

AXI (Advanced extensible Interface) 协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)4.0协议中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。Increase / wrap / fix 是AXI协议中read/write data burst 传输的三种类型,burst传输就是master发1个request,但可以携带或需求(write request or read request) 比

2021-10-31 16:12:39 5237

原创 chapter19 Allocation

Chapter19 Allocation ofPrinciples and Practices of Interconnection Networks by William James Dally, Brian Patrick Towles当仲裁器将单个资源分配给一组请求者中的一个时,分配器执行一组资源和一组请求者之间的匹配,而对于每个请求者,其可能同时请求一个或多个资源。例如,考虑一组router的输入单元,每个输入单元都有一些flit,这些flit的目的地分别为switch的不同输出端口。我们已经在

2021-10-16 22:13:38 237

原创 systemc学习资料

systemC 官网: https://www.accellera.org/downloads/standards/systemcgithub 源码:https://github.com/accellera-official/systemcsystemc 的一个视频 https://space.bilibili.com/413496168?spm_id_from=333.788.b_765f7570696e666f.2 systemC 学习网站 http://www.learnsyst

2021-08-16 15:26:54 1212

原创 C++必须用初始化列表进行初始化的场景

《C++ Primer》 P258 7.5.1构造函数初始化列表 一节类成员为const类型(const 类型在 C++11中,还可以使用 类内初始化方式,也就是直接在声明的时候进行初始化) 类成员为引用类型const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。 ...

2021-05-26 20:23:16 676

原创 TLM/SystemC: tlm socket 绑定问题

在systemc编程中,如果程序run过程中出现以下两种报错,则说明系统中有port没有正确绑定。Error: (E126) sc_export instance already bound: xxxxxxIn file: xxxx/sysc/sysc/communication/sc_export.h:188 (systemc 2.3.3)In file: xxxx/sysc/sysc/communication/sc_export.h:179 (systemc 2.3.1)Err..

2021-05-08 14:35:24 2094

原创 Systemc 常见错误

错误类型 编译错误 错误提示 systemc-2.3.1/include/sysc/datatypes/int/sc_uint_base.h:842: undefined reference to `sc_dt::sc_uint_base::to_string systemc-2.3.1/include/sysc/communication/sc_signal_ports.h:1802: undefined reference ...

2021-04-27 21:15:58 2014 1

原创 SystemC使用sc_report_handler处理log打印

sc_severity是在每次需要打印信息的时候,根据本次信息的类型(info、warning提示,error报错,fatal报错)进行选择。sc_verbosity只在sc_severity为SC_INFO的情况下才有效,这是因为通常情况下,warning/error/fatal信息不会太多,而info信息则比较多,且info信息很多是为了debug使用的,故需要对info信息进行等级区分。对应sc_severity的枚举类型,分别定义了4个基本宏,另外还有一个针对SC_INFO的增强型宏:SC_

2021-04-27 21:11:39 925

原创 C++ 单例模式

单例就是一个类在全局只被例化一次。单例可以减少不必要的new/delete过程,提高performance。单例的实现方法参考 https://www.cnblogs.com/sunchaothu/p/10389842.html其中,构造函数设置为private,也就是不能从外部来new 一个对象,只能通过类内的get_instance函数来new。=delete 阻止拷贝 和 赋值运算符。=delete,用于定义删除函数,在旧标准下,我们如果希望阻止拷贝可以通过显式声明拷贝=defaul.

2021-04-01 16:58:17 177

原创 Virtual box 使用 问题总结

目录Virtualbox 提示不可访问 / inaccessibleubuntu界面提示dev/sda1 contains a file system with error, 提示initramfsvirtualbox启动后显示蓝屏启动后提示welcome to emergency modeVirtualBox 在添加 xxx.vdi时候报uuid 错误在放大缩小虚拟机ui界面时卡死ssh方式登录虚拟机ssh登录时不能使用root 用户apt install 提示 un.

2021-03-29 19:17:35 761

systemc电子系统级设计.pdf

systemc电子系统级设计.pdf

2021-08-16

Snipaste-2.4-Beta-x64.zip

Snipaste-2.4-Beta-x64.zip

2021-02-21

free_screen_recorder.zip

free_screen_recorder.zip

2021-02-21

kernel-devel-2.6.32-696.el6.x86_64.rpm

kernel-devel-2.6.32-696.el6.x86_64.rpm

2021-02-21

cpufrequtils-007-8.el6.x86_64.rpm

cpufrequtils-007-8.el6.x86_64.rpm

2021-02-21

iverilog-v11-20190809-x64_setup.exe

iverilog-v11-20190809-x64_setup.exe

2021-02-21

systemc-2.3.1.tar

systemc-2.3.1.tar

2021-02-21

vtune_profiler_2020_update2.tar.gz

vtune linux 版本

2021-02-21

intel 官方手册.zip

intel官方手册打包,包括指令集手册,performance monitor,五级地址映射,软件优化手册。文档覆盖ring架构和mesh架构的多代产品。

2020-03-28

IEEE systemc manual 1666-2011new.pdf

IEEE Standard for Standard SystemC Language Reference Manual 1666-2011

2020-03-28

74HC573中文资料

74HC573 中文资料 对大家也许有用,可以在用的时候作为参考

2011-08-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除