VL3 奇偶校验

奇偶校验原理与FPGA实现

VL3 奇偶校验

什么是奇偶校验?
计算数据中 “1” 的个数是奇数还是偶数,并据此生成一个校验位(parity bit)。
一、 偶校验(Even Parity)
1.添加一个校验位,使得 33 位(32 数据 + 1 校验)。
2.例如:若 32 位中有 5 个 1(奇数),则校验位 = 1 → 总共 6 个 1(偶数)。
二、奇校验(Odd Parity)
1.添加一个校验位,使得 33 位中 “1” 的总数为奇数。
2.例如:若 32 位中有 6 个 1(偶数),则校验位 = 1 → 总共 7 个 1(奇数)。
三、代码实现
校验的数据为data
那么在data前面加一个^就代表计算data里边是否有奇数个1
^data =1 说明data有奇数个1;
^data =0 说明data有偶数个1;
三、题目

在这里插入图片描述
可以看出,
sel = 1 时,check和^bus相同,说明sel = 1 时是偶校验;
sel = 0 时,check和^bus相异,说明sel = 0 时是奇校验;

`timescale 1ns/1ns
module odd_sel(
input [31:0] bus,
input sel,
output check
);
//*************code***********//
assign check = sel ? ^bus : ~^bus;

//*************code***********//
endmodule
<think>嗯,用户想了解ABAP系统中VL01N事务码的校验增强方法。用户是SAP ABAP开发者,正在处理交货单创建流程的定制需求。从问题表述看,用户对SAP增强机制已有基础认知,但需要具体到VL01N的技术实现细节。 用户可能面临的实际业务场景是:在创建外向交货单时,需要根据公司特定业务规则拦截某些非法操作。比如检查库存是否在特定仓库,或者客户信用是否超限。这类需求在物流模块很常见,用户提问很精准。 参考引用材料,特别是引用[4]关于屏幕增强和引用[5]关于交货单BAPI的说明,可以整合出解决方案。VL01N的增强点主要在三个层面: 1. 出口增强(USER EXIT):适合简单字段校验 2. BAdI增强:更灵活的校验逻辑 3. 隐式增强:当标准程序没有预留出口时的终极方案 需要特别注意引用[5]提到的交货单状态检查(未过账状态才能修改),这在增强实现时是前置条件。用户可能忽略这点,要在步骤中强调。 技术实现的关键点在于: - 使用LE_SHP_DELIVERY_PROC这个BAdI最合适,它专用于交货单处理 - 校验逻辑要区分创建和修改模式 - 必须正确处理消息返回格式,否则会报短文本错误 用户可能会遇到的坑: 1. 忘记在SPRO激活BAdI实现 2. 未处理多语言消息 3. 校验逻辑影响性能(比如全表扫描) 这些都要在回答中预警。 最后考虑给用户延伸建议:如果是复杂校验(比如需要访问其他系统数据),可以提示异步处理的方案。不过当前问题先聚焦基础实现。</think>以下是针对VL01N事务码的ABAP校验增强实现方案,结合SAP标准增强机制分步骤说明: ### 一、增强方法选择 1. **使用交货单BAdI** 推荐采用标准BAdI:`LE_SHP_DELIVERY_PROC`(事务码`SE18`),其方法`CHECK_ITEM_DELIVERY`专用于交货单行项目校验[^4][^5]。 2. **屏幕增强校验** 若需在界面输入时校验(如库位字段),可使用屏幕增强(事务码`SE51`)在PAI事件添加逻辑[^4]。 --- ### 二、BAdI增强实现步骤 #### 步骤1:创建BAdI实现 ```abap " 事务码 SE19 CREATE IMPLEMENTATION -> 输入BAdI名称: LE_SHP_DELIVERY_PROC -> 实现名称: ZIM_LE_SHP_DELIVERY -> 接口方法: IF_EX_LE_SHP_DELIVERY_PROC~CHECK_ITEM_DELIVERY ``` #### 步骤2:编写校验逻辑 ```abap METHOD if_ex_le_shp_delivery_proc~check_item_delivery. DATA: lv_werks TYPE werks_d. " 示例:检查工厂是否在允许列表 SELECT SINGLE werks INTO lv_werks FROM t001w WHERE werks = is_delivery_item-werks AND ekorg IN (&#39;PU01&#39;,&#39;PU02&#39;). " 采购组织限制 IF sy-subrc <> 0. " 错误消息返回 CLEAR: cs_message. cs_message-msgty = &#39;E&#39;. " 错误类型 cs_message-msgid = &#39;VL&#39;. " 消息类 cs_message-msgno = &#39;001&#39;. " 消息编号 cs_message-msgv1 = is_delivery_item-werks. " 工厂编号 cv_result = &#39;X&#39;. " 标记校验失败 ENDIF. ENDMETHOD. ``` #### 步骤3:激活BAdI实现 在SPRO路径激活配置: `SPRO > 物流执行 > 装运 > 交货 > 定义交货处理增强点` ➔ 将实现类分配到激活的BAdI实例[^5]。 --- ### 三、屏幕增强实现(可选) 适用于字段级实时校验: ```abap " 在VL01N屏幕增强的PAI模块添加 MODULE z_check_lgort INPUT. IF vbap-lgort IS NOT INITIAL. SELECT COUNT(*) FROM t001l WHERE werks = vbap-werks AND lgort = vbap-lgort AND kzlla = &#39;X&#39;. " 仅允许特殊库存库位 IF sy-subrc <> 0. MESSAGE e001(zmsg) WITH vbap-lgort. " 自定义消息 ENDIF. ENDIF. ENDMODULE. ``` --- ### 四、校验逻辑设计要点 1. **性能优化** - 使用`SELECT SINGLE`替代循环查询 - 对频繁访问的表(如`LIPS`)添加索引支持 2. **错误消息处理** - 通过`cs_message`结构返回错误(BAdI方式) - 使用消息类统一管理文本(事务码`SE91`) 3. **状态依赖** 通过`LIKP-LFSTA`检查交货单状态,避免对已过账单据校验[^5]: ```abap IF likp-lfsta = &#39;B&#39;. " 已过账状态 RETURN. ENDIF. ``` --- ### 五、增强调试建议 1. 在BAdI方法中设置断点(`/H`启用调试模式) 2. 使用`VL01N`创建测试交货单触发校验 3. 通过`ST22`查看ABAP Dump分析错误 > **注意事项**:若需修改交货单数据(如自动填充字段),应使用`CHANGE_DELIVERY_HEADER`/`CHANGE_DELIVERY_ITEM`方法[^5],校验逻辑仅用于业务规则拦截。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值