Verdi信号平移
信号左移
是将光标移动在双引号以内的信号名左边,然后先输入数字,可以带上单位,如[ns|n]、[ps|p],然后按<<-按键。
https://blog.csdn.net/qq_40268672/article/details/132915499
信号右移
信号右移是数字在右边,信号在左边,用右移符号,其它不变。
研发管理体系
https://ipdbaike.com/?cpzhl/1050.html
IPD是Integrated Product Development,中文叫集成产品,IPD对企业研发行为从战略到执行进行了完整的管理。实践中可以把这个体系当成一个大工具箱,在企业研发的不同阶段,进行合适的裁剪变更,适合企业当前需要,同时体系化的框架也为未来发展预留了升级的空间。
四大产出流程分别对应四个子体系:产品战略、市场需求和管理体系、产品开发、技术开发,如下图。对于研发生产制造一体化的企业,还有一个供应链管理体系。
四大产出团队
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,根据复位和使能作出排列组合:
- moon_dffre
- moon_dffr
- moon_dffe
- 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