在移植内核时,用VIVADO进行综合实现后会出现时序违例,如图:
虽然可以上板正常进行开发,但是还是想把这些违例解决下^_^
检查后,发现是 apb_adv_timer 这条路径报的违例,解决方式
发表于 10-27 07:32
// Use booth-4 algorithm to conduct the multiplication计算部分积
/***
wire [32:0] part_prdt_hi_r; //高位信息(即操作数相加后从dpath返回的信息)
wire [32:0] part_prdt_lo_r;//低位信息(即需要右移的信息,参见蜂鸟书中153页图右移1位下面的框)
wire [32:0] part_prdt_hi_nxt; //更新后的高低位信息
wire [32:0] part_prdt_lo_nxt;
wire part_prdt_sft1_r;
wire [2:0] booth_code = cycle_0th? {muldiv_i_rs1[1:0],1\'b0} // cycle0低位补0,高位补符号位,取后三位作为编码
: cycle_16th ? {mul_rs1_sign,part_prdt_lo_r[0],part_prdt_sft1_r} //周期结束,根据Booth算法补符号位与最后的低位信息
: {part_prdt_lo_r[1:0],part_prdt_sft1_r}; //取后两位并补低位形成3位boothcode
//booth_code == 3\'b000 =0参考booth算法编码表
//booth_code == 3\'b001 =1
//booth_code == 3\'b010 =1
//booth_code == 3\'b011 =2
//booth_code == 3\'b100 = -2
//booth_code == 3\'b101 = -1
//booth_code == 3\'b110 = -1
//booth_code == 3\'b111 = -0
wire booth_sel_zero = (booth_code == 3\'b000) | (booth_code == 3\'b111);
wire booth_sel_two= (booth_code == 3\'b011) | (booth_code == 3\'b100);
wire booth_sel_one= (~booth_sel_zero) & (~booth_sel_two);
wire booth_sel_sub= booth_code[2];
// 35 bits adder needed乘法中加减法操作数生成
wire [`E203_MULDIV_ADDER_WIDTH-1:0] mul_exe_alu_res = muldiv_req_alu_res; //取出返回值也即高位数值
wire [`E203_MULDIV_ADDER_WIDTH-1:0] mul_exe_alu_op2 =
({`E203_MULDIV_ADDER_WIDTH{booth_sel_zero}} & `E203_MULDIV_ADDER_WIDTH\'b0)//0*数=0
| ({`E203_MULDIV_ADDER_WIDTH{booth_sel_one }} & {mul_rs2_sign,mul_rs2_sign,mul_rs2_sign,muldiv_i_rs2}) //数字不变,仅符号拓展
| ({`E203_MULDIV_ADDER_WIDTH{booth_sel_two }} & {mul_rs2_sign,mul_rs2_sign,muldiv_i_rs2,1\'b0}) //2则左移一位,符号位不变
;
wire [`E203_MULDIV_ADDER_WIDTH-1:0] mul_exe_alu_op1 =//cycle0时,装入全0,后面填入乘数,参加蜂鸟书中153页部分积指向加法器的线路
cycle_0th ? `E203_MULDIV_ADDER_WIDTH\'b0 : {part_prdt_hi_r[32],part_prdt_hi_r[32],part_prdt_hi_r};
wire mul_exe_alu_add = (~booth_sel_sub);//dpath指示信号生成
wire mul_exe_alu_sub = booth_sel_sub;
wire mul_exe_alu_mul = cycle_0th? 1\'b0 //周期结束信号
: cycle_16th ? 1\'b1
: 1\'b0;
assign part_prdt_hi_nxt = mul_exe_alu_res[34:2]; //下一个部分积, 传入dpath保存
assign part_prdt_lo_nxt = {mul_exe_alu_res[1:0], //同理,只不过每次右移两位
(cycle_0th ? {mul_rs1_sign,muldiv_i_rs1[31:2]} : part_prdt_lo_r[32:2])
};
wire part_prdt_sft1_nxt = cycle_0th ? muldiv_i_rs1[1] : part_prdt_lo_r[1]; //设muldiv_i_rs1=10,首先在后面补0,此时为100,这样muldiv_i_rs1[1]即为右移两位后的末位,part同理
wire mul_exe_cnt_set = exec_cnt_set & i_op_mul; //控制最后一位的更新
wire mul_exe_cnt_inc = exec_cnt_inc & i_op_mul;
wire part_prdt_hi_ena = mul_exe_cnt_set | mul_exe_cnt_inc | state_exec_exit_ena;//使能信号,控制传入dpath进行更新,dpath会传回最新的乘积信息
wire part_prdt_lo_ena = part_prdt_hi_ena;
sirv_gnrl_dfflr #(1) part_prdt_sft1_dfflr (part_prdt_lo_ena, part_prdt_sft1_nxt, part_prdt_sft1_r, clk, rst_n);
// This mul_res is not back2back case, so directly from the adder result若不是back2back情况,可以直接取出,Booth编码运算后最终结果取[32:1]
wire[`E203_XLEN-1:0] mul_res = i_mul ? part_prdt_lo_r[32:1] : mul_exe_alu_res[31:0];
发表于 10-22 07:11
本文介绍OpenHarmony开源鸿蒙系统的USB控制传输功能实现及相关代码示例,基于触觉智能RK3576开发板PurplePiOH2演示。OpenHarmony的USB通信介绍实现
发表于 09-30 16:31
•1224次阅读
:“这个功能之前做过类似的,你参考下历史代码。”可当他打开代码仓库,却发现注释寥寥,变量名像密码一样难懂,更找不到任何需求文档。他硬着头皮修改,结果上线后引发了线上故障——原来有个隐藏的业务规则,只有老员工才知道。 第二周:
发表于 07-08 15:31
•336次阅读
想买个2k0300的开发板学习龙芯和openharmony,愣是没有看到提供openharmony源码的,也没与看到开源的代码。gitee上,openharmony的龙芯sig仓库也是
发表于 04-26 13:06
我有几个关于 MCUXpresso 深色主题(模式)设置的问题。 请参阅附件。 我想修改 C 代码的注释颜色和用于在项目资源管理器中突出显示源文件的颜色。 这些在哪里发生了变化?
发表于 03-20 06:04
最近从keil转到CUBEIDE编程了,现在非常不舒服的一点是函数注释方面。STM32CUBEide有没有像KEIL一样可以自己指定函数注释模板的方法,可以注释函数形参啊、函数返回值说明的方法
发表于 03-11 08:06
stm32cubemx 6.13.0(win)版本生成代码中文注释乱码
发表于 03-11 07:10
大家好,我是 V 哥。今天给大家整理的内容是关于鸿蒙 NEXT 开发中使用 ArkData 操作 SQLite 数据库的详细介绍,从入门到精通,包含案例代码和注释,帮助小白快速入门到提升。先赞后看,家财万贯。
发表于 03-07 10:55
•785次阅读
您好,最近购买了贵司的DLP4710LC开发模块,我了解到其有32位输入数据总线,我想知道数据的加载方式是怎样的,就是这32位数据总线是如何控制1920×1080个像素的,他的工作流程是怎样的,相关资料有吗,谢谢。
发表于 02-20 06:51
设备。在EVM2的Demo中,我已经将CS4228相关的代码注释掉了,程序也跑起来了(根据Led灯来调试,UART口不知道如何使用,希望知道的人这一点也指点一下我)。但是就是弹出来“无法识别的USB设备
发表于 02-14 08:22
近日,ICSE 2025软件工程实践Track放榜,面向OpenAtom OpenHarmony(以下简称“OpenHarmony”)的ArkTS程序分析基础框架--方舟程序分析器(论文题目为
发表于 01-02 13:41
•1858次阅读
需要注意,CubeMX只是一个初始化工具,它只是帮你完成了HAL库外设和时钟的初始化,具体程序的编写还需要查阅HAL库的说明,使用相关函数实现你想实现的功能。CubeMX生成的代码包含了丰富的注释
发表于 01-01 21:01
•1245次阅读
评论