field module的on input和on request区别

在编辑屏幕的PAI的时候,对字段的检查一般用field xxx module xxx或者用chain。有两种操作可供选择,一种是on input,另一种是on request。

区别是:

on input的触发条件是:只要该字段不为空就会触发module

on request的触发条件是:该字段发生变化后触发module

例如,有两个字段,a、b,两个module,check_a check_b:

field a module check_a on input.

field b module chec_b on request.

无论a发生任何变化,只要a不为空,则每一次回车都会触发check_a;

反之,只有b发生变化后才会触发check_b,如果两次回车中间b没有发生变化,则不会触发check_b。

所以一般来说,用on request的多一些。

另外,以下内容转自其它网站:

1、单个字段检查FIELD <FLD1> MODULE <MDL1>.

2、单个字段多个MODULE检查FIELD <FLD1> MODULE <MDL1>,MODULE <MDL2>.

3、检查多个字段,使用CHAINCHAIN.
FIELD <FLD1>.
FIELD <FLD2>,<FLD3>,<FLD4>.
MODULE <MDL1>.
MODULE <MDL2>.
ENDCHAIN.
表示FLD1,FLD2,FLD3,FLD4有MDL1,MDL2检查。

4、不是初始值检查FIELD <FLD1> MODULE <MDL1> ON INPUT.
ON INPUT表示初始值改变时执行。
特殊情况:
FIELD <FLD1> MODULE <MDL1> ON *-INPUT.
表示用户输入字段首字输入’*’,并切输入字段属性设置了“*”的属性,MODULE有效。

5、有改变的检查FIELD <FLD1> MODULE <MDL1> ON REQUEST.6、CHAIN中又自断不是初始值检查CHAIN.
FIELD <FLD1>.
FIELD <FLD2>,<FLD3>,<FLD4>.
MODULE <MDL1> ON CHAIN-INPUT.
MODULE <MDL2>.
ENDCHAIN.
注意:CHAIN-INPUT表示FLD1,FLD2,FLD3,FLD4不是初始值时执行MDL1检查

### FPGA 中拆包组包的实现方法 #### 1. 数据拆包的过程 在 FPGA 设计中,当上游模块发送数据至当前模块时,通常需要对接收到的数据进行解析。这一过程称为 **数据拆包**。具体来说,拆包涉及以下几个方面: - 接收到来自外部接口或内部总线的数据流后,需按照特定协议提取有用的信息字段。 - 如果数据是以固定长度分段的形式传递,则可以通过移位寄存器或 FIFO 缓冲区逐步读取并重组原始数据帧[^1]。 例如,在某些应用场景下,可能需要将一个完整的 1548-bit 的数据包分割成多个较小的部分以便于高效传输。这种情况下可以采用 USB 或其他高速通信方式完成实际物理层上的移动,并最终由接收端负责重新组装这些片段回原来的结构形式而不会丢失任何细节信息[^2]。 以下是简单的 Verilog 实现代码用于演示如何从连续输入比特流中分离出独立的消息单元: ```verilog module unpacker ( input wire clk, input wire rst_n, // Input data stream input wire [7:0] din, output reg ready_for_new_packet = 1'b0, // Output message fields output reg [31:0] field_a = 'd0, output reg [63:0] field_b = 'd0); always @(posedge clk or negedge rst_n) begin : proc_unpacking if (!rst_n) begin /* Reset all outputs */ ready_for_new_packet <= 1'b0; field_a <= 'd0; field_b <= 'd0; end else begin case ({ready_for_new_packet,din}) 9'd0 ... 9'd31: {field_a} = {{din}, field_a[31:1]}; 9'd32 : `define MARK_AS_READY ; default : ; // Do nothing until next packet starts. endcase end end ``` #### 2. 数据组包的方法 对于要向下级模块转发的数据而言,往往也需要经历类似的准备阶段——即将零散分布的各项参数打包成为统一规格的整体再予以推送出去;这就是所谓的 “**数据组包**”。 以 Modbus 协议为例,在 Artix-7 开发板上利用 RS232 进行双向通讯时,就需要遵循其规定的 CRC 验证机制来确保每次交互的有效性准确性。在此过程中不仅包含了常规意义上的地址码、功能码以及测量数值等内容外加附加的安全检验部分共同构成了完整的一条记录项[^3]。 下面是 Python 版本模拟生成符合标准格式字符串的一个例子: ```python def create_modbus_message(slave_id, function_code, start_address, num_registers): import struct # Pack the main payload into two bytes each for address and count body_bytes = struct.pack('>HH', start_address, num_registers) # Compute checksum over slave ID + func code + packed values full_data = bytearray([slave_id]) + \ bytearray([function_code]) + \ body_bytes[:len(body_bytes)] lrc_value = compute_lrc(full_data) return ''.join(['{:02X}'.format(b) for b in (full_data+lrc_value)]) # Example usage of above method to build a request targeting register range print(create_modbus_message(1, 3, 40001, 10)) ``` --- ####
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值