Quartus II实现二进制运算器教程

版权申诉
0 下载量 59 浏览量 更新于2024-10-16 收藏 752KB RAR 举报
资源摘要信息:"在本资源中,我们将深入探讨使用Quartus II软件平台实现二进制运算器的设计过程。Quartus II是Altera公司(现为英特尔旗下公司)的一款功能强大的FPGA/CPLD设计工具,广泛应用于数字逻辑设计领域。该资源包括电路原理图的设计和仿真文件,旨在为用户提供一个完整的二进制运算器设计案例。 首先,二进制运算器是一个能够执行基本二进制运算(如加法、减法、与、或、非、异或等)的数字电路设备。在数字电路设计中,二进制运算器是构成更复杂数字系统的基础构件。使用Quartus II实现二进制运算器涉及多个步骤,包括设计输入、编译、仿真和硬件实现。 在设计输入阶段,工程师可以选择使用图形化界面的原理图编辑器来绘制电路,也可以采用硬件描述语言(HDL),如VHDL或Verilog来编写代码。对于本资源,我们假定使用原理图方式来设计二进制运算器。设计师需要根据运算需求选择合适的逻辑门元件,并将它们按照所需的逻辑功能连接起来。 在编译阶段,Quartus II将执行多个步骤来处理设计文件,包括分析设计、综合、适配和生成编程文件。分析设计阶段会检查输入文件的语法错误;综合阶段会将高级描述转换为低级逻辑元件;适配阶段则是将逻辑元件映射到具体的FPGA/CPLD器件的物理元件上;最后,生成的编程文件可以用于下载到硬件设备中。 仿真阶段是验证设计是否符合预期功能的重要步骤。Quartus II支持多种仿真工具,例如ModelSim,它可以在硬件编程之前模拟电路的行为。设计师可以创建测试台(testbench),生成一系列的输入信号,观察输出信号,从而验证二进制运算器的功能是否正确。仿真可以帮助设计师在实际硬件编程之前发现并修正设计错误。 文件名称列表中的 'task1_restored' 可能表明这是一个恢复或重新编译的项目文件。这可能意味着原始设计文件在某些操作(如硬件编程)后被还原到Quartus II的设计环境中,准备进行进一步的修改或仿真。 总结来说,该资源提供了一个通过Quartus II实现基本数字电路设计的实例,重点在于二进制运算器的设计和验证过程。它不仅包括了电路设计的图形表示(原理图),还包括了通过仿真确认设计功能正确性的重要步骤。通过这种方式,设计师可以确保他们的设计在转换到实际硬件之前能够正确地工作,从而提高设计的成功率和效率。"

void DlgCheck::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (nType == SIZE_RESTORED || nType == SIZE_MAXIMIZED) { float fsp[2]; POINT Newp; //获取现在对话框的大小 CRect recta; GetClientRect(&recta); //取客户区大小 Newp.x = recta.right - recta.left; Newp.y = recta.bottom - recta.top; fsp[0] = (float)Newp.x / Old.x; fsp[1] = (float)Newp.y / Old.y; CRect Rect; int woc; CPoint OldTLPoint, TLPoint; //左上角 CPoint OldBRPoint, BRPoint; //右下角 HWND hwndChild = ::GetWindow(m_hWnd, GW_CHILD); //列出所有控件 while (hwndChild) { woc = ::GetDlgCtrlID(hwndChild);//取得ID GetDlgItem(woc)->GetWindowRect(Rect); ScreenToClient(Rect); OldTLPoint = Rect.TopLeft(); TLPoint.x = long(OldTLPoint.x * fsp[0]); TLPoint.y = long(OldTLPoint.y * fsp[1]); OldBRPoint = Rect.BottomRight(); BRPoint.x = long(OldBRPoint.x * fsp[0]); BRPoint.y = long(OldBRPoint.y * fsp[1]); Rect.SetRect(TLPoint, BRPoint); GetDlgItem(woc)->MoveWindow(Rect, TRUE); hwndChild = ::GetWindow(hwndChild, GW_HWNDNEXT); } Old = Newp; } if (this->IsPicDerec) { this->drawDerection();//此处因不明原因无法绘制成功,必须绘制两次,待修复 } if (this->IsPicShow) { cv::Mat res = this->getPic().clone(); if (!this->getBackPic().empty()) { vector<vectorcv::Point> contours; cv::findContours(this->getBackPic(), contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);//查找外层轮廓 cv::drawContours(res, contours, -1, cv::Scalar(255)); } else { res = this->getPic(); } if (res.empty()) { AfxMessageBox("Empty res"); } this->DrawcvMat(res, IDC_Picture); } if (this->IsPicDerec) { this->drawDerection(); } }为什么第一次drawDerection()绘制的图片没有显示?

2023-05-30 上传