【Synopsys工具使用】2.Verdi的使用


用VCS生成波形文件并用Verdi打开

  编写Makefile文件:

all:find com     

find:
    find -name "*.v" > file.list
com:                                                                        
    vcs -full64 -sverilog -debug_all -fsdb -f file.list -l com.log
sim:
    simv -l sim.log  

run_dve:                            
    dve -full64 -vpd vcdplus.vpd & 

dve_v:
    dve &

clean:                              
    rm -rf *.vpd csrc *.log *.key *.vpd simv* DVE* verdiLog *.fsdb *.bak *.conf

verdi_v:
    find -name "*.fsdb" > fsdbfile.list
    verdi -f file.list –ssf fsdbfile.list -nologo &

生成fsdb文件

  在tb文件中加入以下代码:

 initial begin
            $fsdbDumpfile("uart_tb.fsdb");
            $fsdbDumpvars(0);
 end

  看模块有多少层,如果模块不大 $fsdbDumpvars(0);参数填0,如果层数很大,填写3

  Verdi无法自己产生波形,所以需要先用VCS生成,可以按照【Synopsys工具使用】1.VCS使用与Makefile脚本调用生成波形;
  只不过在产生fsdb文件后,VCS的中端显示信息如下:
在这里插入图片描述  这表明生成波形后,波形数据被保存到fsdb文件中;
  在命令行中打入 make verdi_v 打开verdi
在这里插入图片描述  选择simulation -> Invoke Simulator在这里插入图片描述  创建一个新波形窗口
在这里插入图片描述在这里插入图片描述

  将信号拖入到窗口中
在这里插入图片描述  输入时长,再点击波形按钮
在这里插入图片描述  即可查看波形
在这里插入图片描述

使用Verdi查看逻辑原理图

  右击选中需要查看的模块,然后选择New_Schematic在这里插入图片描述在这里插入图片描述

1入门 5 基本要求: 5 启用调试 5 编译时间选项 6 必要文件 6 调用DVE 7 64位技术支持平台 8 后台处理程序: 8 交互式界面 9 脚本命令(Scripts): 9 DVE的日志文件 10 在命令行运行仿真 10 DVE与VCS, SystemVerilog, 和NTB (OV 和 SV) 10 VCS MX和VHDL 11 检查点还原的方法 12 C,C++,和System C代码 12 在GUI界面运行仿真 13 后台处理程序(Post-processing) 13 创建并且运行一个交互式的会话 14 运行仿真 15 工具栏的应用 16 模拟器(Simulator)菜单命令的应用 17 命令行的应用 18 保存会话或布局图 18 保存一个布局图会话 20 载入已保存的会话(session) 20 关闭数据库 20 退出DVE 21 2 图形化界面应用 22 DVE窗口属性概述 22 DVE窗格(panes) 23 管理DVE窗口 23 管理目标窗格 24 停放与移除窗口和窗格 25 拖拽和删除一个已停放的窗口 25 菜单栏和工具栏的应用 26 菜单栏参考 27 文件菜单 28 编辑菜单 29 视图查看菜单 30 仿真菜单 32 信号菜单 34 作用域菜单 36 追踪菜单 37 窗口 38 信号 39 模拟器 39 时间操作 40 扩大或缩小 41 扩大或缩小和变动记录 41 上下文记录命令菜单的应用 42 设置显示的首选项(Preferences) 42 自定义显示 42 3 使用层次数据和信号群组窗格 49 层次窗格 49 给信号赋值 50 4 使用源窗口 51 管理交互仿真中的断点 51 控制源窗口中的行断点 51 在对话框中管理断点 52 行断点 52 时间断点 53 信号断点 54 断言断点 55 任务/函数断点 56 编辑断点 57 5 运用波形窗口 58 建立目标窗口 58 设置波形窗口首选项 58 重命名信号组 60 过滤信号 60 添加信号分离器 60 设置复制信号的显示 60 创建一个用户定义基数 61 管理用户定义基数 61 导入和导出一个用户定义基数 62 运用波形窗 62 制定波形显示 63 指针和标记 64 使用指针 64 运用标记 65 移动,隐藏和删除标记 67 扩展和收缩波形信号 68 在图像窗中搜索 68 比较信号,域和组 68 建立总线并设置表达式 70 使用总线/表达式对话框 70 总线/表达式列表框 71 显示/隐藏细目表格 71 创建一个总线 72 修改总线成分 73 管理表达式列表 73 移位信号 74 8 断言与覆盖率 75 SV断言的编译 75 断言结果的观察 75 显示标准的设置 76 断言的调试 77 观察波形窗口中断言的失效 78 观察断言失效时间增量 79 源代码的定位 80 9 动态驱动和载入的跟踪 81 跟踪功能 82 支持的功能 83 不支持的功能 83 Vera的功能 83 跟踪驱动程序 84 跟踪载入 85 Vera的功能 86
<think>嗯,用户问的是在C#中除了使用SendKeys.SendWait("")之外,有没有更好的方法将文本输入到软件的输入框里。我需要先回忆一下C#中常用的UI自动化方法,以及不同场景下的适用方案。 首先,用户提到的SendKeys属于System.Windows.Forms命名空间,通常用于模拟键盘输入。但这种方法依赖于焦点和窗口状态,可能会有不稳定的时候。比如目标窗口没激活的话,输入可能失败。所以用户可能遇到了类似的问题,想找更可靠的方法。 接下来,我应该考虑其他UI自动化框架。比如Windows UI Automation(UIA),这是微软推荐的现代方法,支持更精确的元素定位和操作。通过AutomationElement类,可以找到目标输入框并设置值。这需要用到UIA的库,比如UIAutomationClient和UIAutomationTypes。 还有,Win32 API的SendMessage函数可能也是一种方式,特别是对于传统的Win32应用。通过FindWindow和FindWindowEx找到控件句柄,然后用SendMessage发送WM_SETTEXT消息。不过这种方法需要知道控件的句柄和类型,可能比较复杂,但效率高。 另外,如果目标软件是Web应用,可能需要用Selenium WebDriver。不过用户的问题可能更多针对桌面应用,但提一下Web的情况也有助于覆盖更多可能性。 对于WPF或WinForms这类托管应用,UI测试框架如White或者FlaUI可能更友好。FlaUI是基于UIA的,适合现代应用的自动化。不过这些是第三方库,需要用户安装,但可能比原生方法更方便。 用户可能需要的是稳定性更高、不依赖焦点的方法。比如UIA可以直接操作元素,不需要窗口在前台,这对后台操作有帮助。而SendKeys需要窗口激活,可能不适合某些场景。 另外,需要考虑用户的使用场景。如果是在做自动化测试,可能需要更健壮的框架;如果是内部工具,可能倾向于简单的API调用。所以应该分点列出不同方法,并说明适用场景,让用户根据情况选择。 最后,确保回答结构清晰,先指出SendKeys的局限性,再分点介绍替代方案,每个方法简要说明原理和示例,以及优缺点,帮助用户理解选择。同时提醒用户权限和兼容性问题,比如管理员权限或者不同系统版本的支持。</think>在C#中除了`SendKeys.SendWait()`之外,还有以下更稳定、更专业的文本输入方案(按推荐优先级排序): 1. **Windows UI Automation (UIA)** ```csharp using UIAutomationClient; // 通过控件属性精准定位输入框 AutomationElement inputBox = AutomationElement.FromHandle(hWnd) .FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)); // 直接设置文本值(无需模拟键盘输入) ValuePattern valuePattern = inputBox.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; valuePattern.SetValue("Hello UIA"); ``` *优势*:微软官方推荐方案,支持跨进程操作,不依赖窗口焦点,可后台操作 2. **Win32 API (SendMessage)** ```csharp [DllImport("user32.dll")] static extern int SendMessage(IntPtr hWnd, int msg, int wParam, string lParam); // 通过FindWindow获取控件句柄 IntPtr hWnd = FindWindow("Notepad", null); IntPtr editHandle = FindWindowEx(hWnd, IntPtr.Zero, "Edit", null); // 直接发送文本设置指令 const int WM_SETTEXT = 0x000C; SendMessage(editHandle, WM_SETTEXT, 0, "Direct API call"); ``` *优势*:原生API效率最高,适合对性能要求高的场景 3. **InputSimulator (NuGet包)** ```csharp // 安装:Install-Package InputSimulator var simulator = new InputSimulator(); simulator.Keyboard .TextEntry("Typing like human") // 支持Unicode .Sleep(100) // 可添加自然输入间隔 .KeyPress(VirtualKeyCode.RETURN); ``` *优势*:模拟真实键盘行为,支持复杂输入组合,带延迟模拟更人性化 4. **Windows Forms/WPF原生控件操作** ```csharp // 直接操作已知控件实例 textBox1.Invoke((MethodInvoker) delegate { textBox1.Text = "Direct access"; // 线程安全操作 textBox1.SelectionStart = textBox1.Text.Length; }); ``` *前提*:需要能直接访问控件实例,适用于自开发应用程序的自动化 **方案选择建议**: - 优先使用UIA(现代应用兼容性好) - 需要最高性能时选Win32 API - 需要模拟真实用户输入时用InputSimulator - 自研系统优先使用原生控件操作 **注意事项**: 1. 使用UIA时需要引用程序集: ```xml <Reference Include="UIAutomationClient" /> <Reference Include="UIAutomationTypes" /> ``` 2. 跨进程操作可能需要以管理员权限运行程序 3. 复杂UI结构建议使用Inspect.exe工具分析控件属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPRAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值