<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[anthonyma的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/anthonyma</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; anthonyma]]></copyright><item><title><![CDATA[system verilog，可改变参数的计数器模块]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/147139228</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/147139228</guid><author>anthonyma</author><pubDate>Fri, 11 Apr 2025 16:14:37 +0800</pubDate><description><![CDATA[（1）因为需要将 count_number 与 MAX_COUNT 对比，所以 count_number 的位宽必须与 MAX_COUNT 一致。假设需要计数 20 个 clk，那么向 MAX_COUNT 赋值 5'd26，BITS_W 赋值 5'd5。MAX_COUNT 是需要的最大计数值，BITS_W 是用来匹配 MAX_COUNT 的位宽。（2）调用时，实例化的对象名必须放在 parameter 传参之后。设计一个可改变计数规模的计数器。]]></description><category></category></item><item><title><![CDATA[system verilog，定义包含约束、字段自动化的数据传输类]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/147074840</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/147074840</guid><author>anthonyma</author><pubDate>Wed, 09 Apr 2025 14:28:10 +0800</pubDate><description><![CDATA[如果没有 solve before，仿真会产生两种求解顺序：先随机产生一个 sel 后再据此产生wdata_num ，或先随机产生一个 wdata_num 后再据此产生 sel。`uvm_object_utils_begin(class_name) 和 `uvm_object_utils_end 必须配对使用。`uvm_field_array_int(array_name, FLAG) 用于注册动态数组类型的字段。`uvm_field_int(var_name, FLAG) 用于注册整数类型的字段。]]></description><category></category></item><item><title><![CDATA[借用2位寄存器，对信号四分频的方法]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/146905804</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/146905804</guid><author>anthonyma</author><pubDate>Tue, 01 Apr 2025 14:21:47 +0800</pubDate><description><![CDATA[pclk_neg 有效时 pclk 被拉低，pclk_pos 有效时 pclk 被拉高，完成四分频。可以看到 clk_cnt[1] 在 4 个 clk 的循环内是 0、0、1、1，刚好可以作为四分频的完整周期。clk_cnt 经历 2'b00、2'b01、2'b10、2'b11 四个状态的循环，其中每个状态保持一个 clk。分别得到 clk_cnt[1] 的上升沿信号 pclk_pos，下降沿信号 pclk_neg。如上所述，clk_cnt[1] 以 4 个 clk 做循环，刚好是一个四分频。]]></description><category></category></item><item><title><![CDATA[使用 system verilog 编写，用于简化 UVM 结构的宏的学习心得]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/146095013</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/146095013</guid><author>anthonyma</author><pubDate>Fri, 07 Mar 2025 17:24:54 +0800</pubDate><description><![CDATA[ifndef tc_macro_sv // 如果没有定义 tc_macro_sv，就执行下面的命令，定义 tc_marto_sv// 使用 package 进行打包，方便维护endtask \endclassendpackage::tc_macro_pkg // 后缀 ::tc_macro_pkg 不是必要`endif。]]></description><category></category></item><item><title><![CDATA[学习用于混仿的测试用例，并编写过温下电的测试用例的知识总结 第二部分]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/145985333</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/145985333</guid><author>anthonyma</author><pubDate>Mon, 03 Mar 2025 17:20:18 +0800</pubDate><description><![CDATA[使用 event 来实现多个进程之间的同步处理，例如一个进程等待 event 发生，当该 event 发生后那么对应的进程将会被执行。同一个initial begin end内的语句是顺序执行的，所以两个 begin end顺序执行，并且单个begin end内也是顺序执行。event实际上是一个静态对象句柄指向一个同步的对象，并且触发 event 和等待 event 的触发成对使用。注意，如果使用@(event);等待事件触发，等待的时间必须小于触发的时间，即要在事件触发之前，将@(event);]]></description><category></category></item><item><title><![CDATA[学习用于混仿的测试用例，并编写过温下电的测试用例的知识总结]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/145911584</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/145911584</guid><author>anthonyma</author><pubDate>Fri, 28 Feb 2025 20:12:50 +0800</pubDate><description><![CDATA[（1）"uvm_root" 是 uvm 的顶层类，使用 "uvm_root::get()" 实例化一个 "uvm_root" 类的对象；（2）使用 ".set_timeout()" 调用设置超时的功能；（3）".timeout(10ms)" 传递 10ms 给延迟参数。注意：1.声明数组，和定义数组大小必须分开，byte a[] = new[256];是错误的；2.写入数据时，索引左小右大。mstate[0:5] 正确；mstate[5:0] 错误。]]></description><category></category></item><item><title><![CDATA[《UVM 实战》 第二章 Episode 1]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/142642319</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/142642319</guid><author>anthonyma</author><pubDate>Tue, 05 Nov 2024 10:38:02 +0800</pubDate><description><![CDATA[在 my_interface.sv 中定义 interface 类 my_interface。// 48bit的以太网目的地址// 48bit的以太网源地址// 以太网类型// 携带数据的大小// 所有数据的校验值// 对 pload 添加约束函数，规定 pload 的大小endclass// 模拟的校验算法// post_randomize 是 UVM 自带函数，在某个类的实例的 randomize 被调用后// 自动调用。]]></description><category></category></item><item><title><![CDATA[Verilog 中有符号数的位扩展，计算，四舍五入，饱和截取。]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/141159517</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/141159517</guid><author>anthonyma</author><pubDate>Tue, 13 Aug 2024 14:56:04 +0800</pubDate><description><![CDATA[总位宽 M ，小数位宽 N ，最高位是符号位.有两种表示方法。（1）MQN。（2）（1，M，N）。例如，8 位有符号小数 100.11001 ，可以表示为：8M6 ，或 （1，8，6）。]]></description><category></category></item><item><title><![CDATA[基于 Xilinx 提供的 BUFGCE 的门控时钟设计]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/139743809</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/139743809</guid><author>anthonyma</author><pubDate>Tue, 18 Jun 2024 21:32:24 +0800</pubDate><description><![CDATA[与 BUFG 不同，BUFGCE 由一个时钟输入、一个时钟输出、一个时钟使能信号构成。这个原语基于 BUFGCTRL 并以一些引脚连接逻辑高电位和低电位。图 2-7 表明了 BUFGCE 和 BUFGCTRL 的关联。LOC 约束可用于手动布置 BUFGCE 和 BUFGCE_1 的位置。使能信号线路使用了 BUFGCTRL 的 CE 引脚，使能信号必须满足预设时间的要求。违反此预设时间会产生毛刺。]]></description><category></category></item><item><title><![CDATA[使能时钟的设计，使用时能时钟代替分频时钟]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/139698972</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/139698972</guid><author>anthonyma</author><pubDate>Sat, 15 Jun 2024 22:19:54 +0800</pubDate><description><![CDATA[FPGA 内部时钟使用逻辑计数分频产生的时钟，一般不推荐直接将其用于内部逻辑。若不希望使用 PLL 资源，可以考虑使用使能时钟进行分频。使能时钟进行分频的好处：（1）避免时钟过多，会造成不稳定；（2）保持一个时钟，减少跨时钟域；（3）时序设计可以使用 “ 多周期约束 ”。]]></description><category></category></item><item><title><![CDATA[Vivado 实现倍数含有小数的分频器设计]]></title><link>https://blog.youkuaiyun.com/anthonyma/article/details/139608469</link><guid>https://blog.youkuaiyun.com/anthonyma/article/details/139608469</guid><author>anthonyma</author><pubDate>Fri, 14 Jun 2024 11:32:20 +0800</pubDate><description><![CDATA[由上得知，62.5 个时钟 A ，产生 1 个低频时钟 B （ 62.5 分频，即 1 个输入时钟 A ，产生 1/62.5 个低频时钟 B）。取公约数 5 进行化简：需要 1 个 62 分频，1 个 63 分频，共 125 个输入时钟 A ，产生 2 个 低频时钟 B。说明需要 5 个 62 分频，5 个 63 分频，共 625 个输入时钟 A ，产生 10 个 低频时钟 B。但电路无法产生 0.5 个时钟，因此将其扩大为：625 个时钟 A ，产生 10 个低频时钟 B。频率是时钟周期的倒数。]]></description><category></category></item></channel></rss>