首页 > 其他分享 >Verdi信号平移+研发管理体系+malloc和calloc函数区别+使用__FILE__只打印文件名+使用inline替换#define的注意项+I2C和I3C的区别+always时序逻辑的另一种写

Verdi信号平移+研发管理体系+malloc和calloc函数区别+使用__FILE__只打印文件名+使用inline替换#define的注意项+I2C和I3C的区别+always时序逻辑的另一种写

时间:2024-01-21 14:33:06浏览次数:38  
标签:__ malloc 打印文件 power 区别 int https calloc

Verdi信号平移

信号左移

是将光标移动在双引号以内的信号名左边,然后先输入数字,可以带上单位,如[ns|n]、[ps|p],然后按<<-按键。
https://blog.csdn.net/qq_40268672/article/details/132915499
image

信号右移

信号右移是数字在右边,信号在左边,用右移符号,其它不变。

研发管理体系

https://ipdbaike.com/?cpzhl/1050.html
IPD是Integrated Product Development,中文叫集成产品,IPD对企业研发行为从战略到执行进行了完整的管理。实践中可以把这个体系当成一个大工具箱,在企业研发的不同阶段,进行合适的裁剪变更,适合企业当前需要,同时体系化的框架也为未来发展预留了升级的空间。
四大产出流程分别对应四个子体系:产品战略、市场需求和管理体系、产品开发、技术开发,如下图。对于研发生产制造一体化的企业,还有一个供应链管理体系。
image

四大产出团队

IPMT(Integrated Product Management Team,集成产品管理团队):代表了公司的决策层。
PMT(Portfolio Management Team,组合管理团队):是市场管理的执行者。
PDT(Product Development Team,产品开发团队):是产品开发的具体实施团队。
TDT(Technology Development Team,技术开发团队):是产品/技术平台开发、公共组件CCB开发、技术探索预研的实施团队,同样也是由各职能部门代表组成的跨部门团队。
四大产出团队的共同特征就是跨部门,由专业的人做分工,避免拍脑袋决策,和没有根据的拍着胸脯乱承诺。

CBB模块

http://m.anytesting.com/news/1931375.html
CBB: Common Building Block,即共用构建模块。指在产品开发及集成过程中,在不同产品、系统之间可以共用的构建模块(BB),如子系统、模块/组件、关键零部件、技术及其他相关的设计成果等。要成为CBB,应具备以下几个特征:共用性、可集成界面清晰功能、性能指标明确可维护、可测试有完善的资料手册。
若开发一款产品时,重用许多成熟的CBB部件,无疑产品的质量、开发进度,以及产品的成本会得到更有效地控制和保证。有机构调查后得出,缺乏CBB管理的企业,研发人员将有60%左右的重复劳动,不断研发已存在的成果。基于这个研究结果可见,单纯的增加研发人员,而不改变工作方式、方法,研发的效率就不会得到根本的改变。
海尔公司从2002年引入CBB模块化设计,冰箱产品的料号从2700种下降到900种,其中原来的2700种只保留料号大约300种。此后建立了综合产品开发平台,针对海外大学生特定的客户需求,可以在12天以内,开发和制造出新型号的产品,极大缩短了产品的开发周期和上市时间,推动产品快速上市。此外,还减少产品的复杂性和开发资源。

malloc和calloc函数区别

https://blog.51cto.com/liangchaoxi/4067314
https://c-cpp.com/c/memory/malloc.html

参数个数上的区别:

malloc函数:malloc( size_t size)函数有一个参数,即要分配的内存空间的大小。
calloc函数:calloc( size_t numElements, size_t sizeOfElement)有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。

初始化内存空间上的区别:

malloc与calloc没有本质区别,malloc之后的未初始化内存可以使用memset进行初始化。所以malloc比calloc更高效(后者带有内存清零步骤)。

calloc

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int *p1 = calloc(4, sizeof(int));    // 分配并清零 4 个 int 的数组
    int *p2 = calloc(1, sizeof(int[4])); // 等价,直接命名数组类型
    int *p3 = calloc(4, sizeof *p3);     // 等价,免去重复类型名
 
    if(p2) {
        for(int n=0; n<4; ++n) // 打印数组
            printf("p2[%d] == %d\n", n, p2[n]);
    }
 
    free(p1);
    free(p2);
    free(p3);
}

输出:

p2[0] == 0
p2[1] == 0
p2[2] == 0
p2[3] == 0

malloc

#include <stdio.h>   
#include <stdlib.h> 
 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // 足以分配 4 个 int 的数组
    int *p2 = malloc(sizeof(int[4])); // 等价,直接命名数组类型
    int *p3 = malloc(4*sizeof *p3);   // 等价,免去重复类型名
 
    if(p1) {
        for(int n=0; n<4; ++n) // 置入数组
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // 打印出来
            printf("p1[%d] == %d\n", n, p1[n]);
    }
 
    free(p1);
    free(p2);
    free(p3);
}

输出:

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9

使用__FILE__只打印文件名

https://www.runoob.com/cprogramming/c-function-strrchr.html
https://blog.csdn.net/wangtingyao1990/article/details/115631437
借用strrchr函数:
C 库函数 char *strrchr(const char *str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。

//windows(Linux编译器cywin):
#define filename(x) strrchr(x,'/')?strrchr(x,'/')+1:x
//linux :
#define filename(x) strrchr(x,'/')?strrchr(x,'/')+1:x

使用inline替换#define的注意项

https://cloud.tencent.com/developer/ask/sof/111724472
在使用__LINE__的时候,如果是使用inline的方法,仍然会只是打印为调用的位置,因此需要使用#define配合完成inline的操作。

#define MY_EXCEPTION(aMessage) MyException(aMessage, __FILE__, __LINE__) 

inline void MyException(const std::string aMessage,
                        const char* fileName,
                        const std::size_t lineNumber)
{
   std::ostringstream stream;
   stream << "EXCEPTION: " << aMessage << ", file " << fileName << " line " << lineNumber;
   throw ExceptionImpl(stream.str());
}

I2C和I3C的区别

https://www.51cto.com/article/711362.html
因为没有统一的方法来连接物理传感器,设计师面临的数字接口碎片包括 I2C、SPI 和 UART 等。除了主接口,还可能需要其他信号,例如专用中断、芯片选择信号(SPI),启用和睡眠信号。这会增加所需的主机 GPIO 数量和更多 PCB 层的系统成本。
I2C 虽然也是两条线,但是很多时候传感器需要一条额外的中断线,来告诉主控数据已经准备好。I3C 允许从设备直接在总线上产生中断,不再需要一条额外的中断线。
I2C 传输速度最高 3.4MHz,I3C 可以 12.5MHz +。
I3C 向下兼容 I2C,但不兼容 10bit 的 I2C 扩展地址。
I2C 的从设备是静态地址,I3C 是动态地址,由主设备给从设备分配动态地址。

always时序逻辑的另一种写法

对于资深老工程师所强烈保留的一切接口不掺sv的杂结构体、一切代码逻辑和变量只要能跑且不出错就行的原则,对各种缩进和模块化像一幅抽象画展一样的结果,确实无可厚非,甚至应该是一切你都对的原则,毕竟那些人写出的代码才是真正能跑而且bug少的代码,甚至还会嘲讽新手那种花里胡哨虚有其表而且跑不动的bug多的笨重代码。
但是,作为个人的学习,凭借个人对客观世界的理性分析,时代在进步,不应该错过任何一个可能优化流程的方法,而不是嗤之以鼻的刻板想法拥抱过去,如果过去更好,那么当然也应该学习过去。
https://zhuanlan.zhihu.com/p/662463743
always语句另一种写法是构建cbb模块,这些cbb模块是直接和工艺库对应的模块,使用dff,根据复位和使能作出排列组合:

  1. moon_dffre
  2. moon_dffr
  3. moon_dffe
  4. moon_dff
    原始代码:
reg [7:0]power;
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        power <= 8'b0;
    else if(case0)
        power <= case0_data;
    else if(case1)
        power <= case1_data;
    else if(case2)
        power <= power + 1'b1;
end

替换为:
相比于always语句,对mux和门电路更直观体现出来。能够规避不合理的代码习惯(always语句存在给常量赋值导致的功耗约束下,时钟门控无法插入);X态传播检查;增补校验逻辑;计算面积占用。

//信号声明
wire [7:0]power_d;
wire [7:0]power_q;
wire	  power_en;

//组合逻辑
assign power_en = case0 || case1 || case2;
assign power_d  = case0 ? case0_data :
                  case1 ? case1_data :
                          power_q + 1'b1;

//时序逻辑
moon_dffre #(.WD(8))
u_power_dff(.clk(clk), .rst_n(rst_n), .d(power_d), .en(power_en), .q(power_q));

标签:__,malloc,打印文件,power,区别,int,https,calloc
From: https://www.cnblogs.com/bai2022/p/17977752

相关文章

  • Proxmox VE 8 试装Oracle 23c
    作者:田逸(formyz)Oracle当前的最新版本是23c,虽然官方网站下载不了它的正式版本,但是却提供了一个性能受限的免费版本“OracleDatabase23.3Free”(存储容量受限、内存使用受限)。这里就只好用这个免费的版本来做测试,免费的版本能正常部署,那么将来的正式版本的部署也不在话下。Oracle......
  • 无涯教程-Node.js - 全局对象
    Node.js全局对象本质上是全局的,并且在所有模块中都可用,无涯教程不需要在应用程序中包含这些对象,而是可以直接使用它们。__filename__filename表示正在执行的代码的文件名,这是此代码文件的解析绝对路径,对于主程序,此文件名不必与命令行中使用的文件名相同,模块内部的值是该模......
  • PSoc62™开发板之rtc时间获取
    实验目的1.使用PSoc62™芯片读取内部rtc时间2.OLED屏幕显示当前时间戳实验准备PSoc62™开发板SSD1306OLED模块公母头杜邦线芯片资源PSoC6系列MCU时钟系统由以下几部分组成,PSoc62™开发板没有接外部时钟源,所以只能从IMO、ILO、PILO里边配置三个内部的时钟源8-MHzi......
  • OpenAI首席执行官Sam Altman与中东投资者和台积电讨论合作,共同开创新一代芯片企业
    Ai工具集导航(Ai-321.com)OpenAI首席执行官SamAltman目前正怀着雄心壮志与中东投资者和著名芯片制造商台积电(TSMC)进行讨论,意图共同创立一家全新的芯片企业。消息人士透露,此举是为了满足OpenAI公司对半导体的持续快速增长需求,并同时减少对英伟达的依赖。这位年仅38岁的企业家已经与......
  • Perplexity AI:给搜索引擎注入了新的生命力
    Ai工具集导航(Ai-321.com)新时代的互联网世界中,搜索引擎被誉为“王冠顶上的明珠”。毕竟,百度和谷歌这两大巨头在两岸三地都享有举足轻重的地位。然而,随着AI大模型的崛起,AI赋能搜索引擎已经成为业界的新潮流。国内市场上,昆仑万维的天工AI搜索成为瞩目的新秀;而在海外,则有AI搜索初创公司......
  • 无涯教程-Node.js - Web模块
    Web服务器是一个软件应用程序,它处理HTTP客户端(例如Web浏览器)发送的HTTP请求,并返回网页以响应客户端,Web服务器通常提供html文档以及图像,样式表和脚本。Web应用架构Web应用程序通常分为四层-Client         -该层由Web浏览器,移动浏览器或可以向Web服务器......
  • 我与计算机
    自从我有记忆以来,计算机就已成为我生活和工作的一部分。作为一个在信息时代出生和长大的人,我已经习惯了与这个冷冰冰的机器共舞,让它成为我手中的笔,是我表达思想,解决问题和追求知识的有利工具。1946年,世界上第一台电子计算机ENIAC诞生,标志着人类进入了计算机时代。从那以后,计算机......
  • pytest运行结果乱码处理
    pytest终端打印结果,中文乱码,解决方式:(我个人觉得第一种方式好)第一种方式:在pytest.ini文件中添加一行代码:disable_test_id_escaping_and_forfeit_all_rights_to_community_support=True第二种方式,conftest.py中添加钩子函数pytest_collection_modifyitemsdefpytest_collecti......
  • 我和计算机
    在21世纪的今天,计算机已经渗透到我们生活的方方面面,它不仅改变了我们的生活方式,也丰富了我们的精神世界。作为一名大学生,我和计算机的关系异常密切,它已经成为我生活中不可或缺的一部分。首先,计算机是我学习的重要伙伴。无论是查找资料、完成作业,还是在线学习、参加远程课程,计算机......
  • Docker 学习笔记 - 4
    容器数据卷1.容器数据卷(1)是什么容器删除后数据自然也就没有了,所以用卷来保存数据。容器数据卷功能是持久化和数据共享。卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFileSyste提供一些用于持续存储或共享数据的特性。......