Quartus II的IP核調用及仿真測試

目錄

    • 第一章 什么是IP核?
    • 第二章 什么是LPM?
      • 第一節 設置LPM_COUNTER模塊參數
      • 第二節 仿真
    • 第三章 什么是PLL?
      • 第一節 設置ALTPLL(嵌入式鎖相環)模塊參數
      • 第二節 仿真
    • 第四章 什么是RAM?
      • 第一節 RAM_1PORT的調用
      • 第二節 配置RAM_1PORT
      • 第三節 RAM_2PORT的調用
      • 第四節 配置RAM_2PORT
    • 第五章 什么是FIFO?
      • 第一節 FIFO模塊參數配置
      • 第二節 配置FIFO
    • 參考文獻

第一章 什么是IP核?

IP核就是知識產權核或知識產權模塊的意思,在EDA技術開發中具有十分重要的地位。美國著名的Dataquest咨詢公司將半導體產業的IP定義為“用于ASIC或FPGA中的預先設計好的電路功能模塊”。IP主要分為軟IP、固IP和硬IP。軟IP是用Verilog/VHDL等硬件描述語言描述的功能塊,但是并不涉及用什么具體電路元件實現這些功能。固IP是完成了綜合的功能塊。硬IP提供設計的最終階段產品——掩膜。[1]

第二章 什么是LPM?

LPM即參數化模塊庫(Library of Parameterized Modules),是Altera 公司FPGA/CPLD設計軟件Quartus II自帶的一些宏功能模塊,如:鎖相環(PLLs), LVDS,數字信號處理(DSP) 模塊等。這些功能是對Altera器件的優化,設計者在用這些模塊時,不耗用器件的邏輯資源(Logic Cell)。[2]

第一節 設置LPM_COUNTER模塊參數

  1. 新建項目,點擊IP Catalog,在搜索框內輸入counter,點擊LPM_COUNTER,然后將其保存為myLPM_counter.v,點擊Ok開始配置
    在這里插入圖片描述
    在這里插入圖片描述

  2. 基礎設置在這里插入圖片描述

  3. 設置輸入并點擊NEXT。
    在這里插入圖片描述

  4. 多次點擊NEXT,出現如下界面后選擇需要文件,點擊Finish完成配置,在彈出界面點擊Yes
    在這里插入圖片描述
    在這里插入圖片描述

第二節 仿真

  1. 新建Verilog HDL File,然后寫入代碼,生成需要的模型,將其保存為Updown_counter10.v
    在這里插入圖片描述
module Updown_counter10 (aclr,cp_en,cp,updown,co,q);input aclr;input cp_en;input cp;input updown;output co;output [3:0] q;myLPM_counter  myLPM_counter_inst(.aclr(aclr),.clk_en(cp_en),.clock(cp),.updown(updown),.cout(co),.q (q));
endmodule	 

文件目錄如下
在這里插入圖片描述

  1. 設置LPM_COUNTER,修改myLPM_counter.qip文件下的myLPM_counter.v,使其符合期望
`timescale 1 ps / 1 ps
module myLPM_counter (aclr,clk_en,clock,sclr,updown,cout,q);input   aclr;input	  clk_en;input	  clock;input	  sclr;input	  updown;output	  cout;output	[3:0]  q;wire  sub_wire0;wire [3:0] sub_wire1;wire  cout = sub_wire0;wire [3:0] q = sub_wire1[3:0];lpm_counter	LPM_COUNTER_component (.clk_en (clk_en),.clock (clock),
//				.sclr (sclr),.updown (updown),.cout (sub_wire0),.q (sub_wire1),.aclr (1'b0),.aload (1'b0),.aset (1'b0),.cin (1'b1),.cnt_en (1'b1),.data ({4{1'b0}}),.eq (),.sclr(1'b0),.sload (1'b0),.sset (1'b0));defparamLPM_COUNTER_component.lpm_direction = "UNUSED",LPM_COUNTER_component.lpm_modulus = 10,LPM_COUNTER_component.lpm_port_updown = "PORT_USED",LPM_COUNTER_component.lpm_type = "LPM_COUNTER",LPM_COUNTER_component.lpm_width = 4;
endmodule
  1. 開始完整編譯,編譯通過后,新建University Program VWF進行仿真
    在這里插入圖片描述

在這里插入圖片描述

  1. 仿真
    在這里插入圖片描述
    觀察仿真結果發現,結果與預期相同

第三章 什么是PLL?

PLL即鎖相環 (phase locked loop)是一種利用相位同步產生的電壓,去調諧壓控振蕩器以產生目標頻率的負反饋控制系統。根據自動控制原理,這是一種典型的反饋控制電路,利用外部輸入的參考信號控制環路內部振蕩信號的頻率和相位,實現輸出信號頻率對輸入信號頻率的自動跟蹤,一般用于閉環跟蹤電路。是無線電發射中使頻率較為穩定的一種方法,主要有VCO(壓控振蕩器)和PLL IC (鎖相環集成電路),壓控振蕩器給出一個信號,一部分作為輸出,另一部分通過分頻與PLL IC所產生的本振信號作相位比較,為了保持頻率不變,就要求相位差不發生改變,如果有相位差的變化,則PLL IC的電壓輸出端的電壓發生變化,去控制VCO,直到相位差恢復,達到鎖相的目的。能使受控振蕩器的頻率和相位均與輸入信號保持確定關系的閉環電子電路。[3]

第一節 設置ALTPLL(嵌入式鎖相環)模塊參數

  1. 選擇ALTPLL,與第二章第一節相同的處理方法,在IP Catalog中搜索PLL,選擇ALTPLL在點擊左下角的Add按鈕將其保存為mypll.v文件并開始配置

    在這里插入圖片描述

  2. 根據選擇的芯片設置合適的晶振,ep4ce115f29c7的晶振為50MHZ,使用時鐘頻率選擇50MHZ,模式為正常
    在這里插入圖片描述

  3. 以下配置默認即可
    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

  4. 設置時鐘
    c0:設置100MHZ,將時鐘倍頻,占空比設置50%
    在這里插入圖片描述
    c1:25MHZ,選擇分頻,且相位偏移90°,占空比50%
    在這里插入圖片描述
    c2:5MHZ,占空比為25%
    在這里插入圖片描述
    c3:先分頻再倍頻,75MHZ,占空比50%
    在這里插入圖片描述
    目前只選擇4個時鐘,第5個時鐘不啟用

  5. 多次點擊next,直到出現此界面,勾選mypll_inst.v文件和mypll_bb.v文件
    在這里插入圖片描述

第二節 仿真

  1. 新建Verilog HDL File,寫入下面的模型代碼,保存為test_IP.v
module test_IP(input           clk     , // 時鐘信號input           rst_n   , // 上電復位低有效output          c0      ,output          c1      ,output          c2      ,output          c3      ,output          locked  
);// PLL
mypll mypll_inst (.areset ( ~rst_n ), // IP復位高有效.inclk0 ( clk    ), // 輸入時鐘.c0     ( c0     ), // 輸出時鐘.c1     ( c1     ), // 輸出時鐘.c2     ( c2     ), // 輸出時鐘.c3     ( c3     ), // 輸出時鐘.locked ( locked )  // 時鐘輸出鎖--鎖定不穩定時鐘輸出
);endmodule

以及測試代碼test_tb.v

`timescale 1ns/1ps
module test_tb();reg             clk         ;reg             rst_n       ;wire            c0          ;wire            c1          ;wire            c2          ;wire            c3          ;//例化要仿真的文件
test_IP u_test_IP(.clk        (clk        ),//時鐘信號.rst_n      (rst_n      ),//上電復位低有效.c0         (c0         ),.c1         (c1         ),.c2         (c2         ),.c3         (c3         ),.locked     (locked     )
);always  #10     clk = ~clk;//產生50M仿真時鐘integer i = 0,j = 0;//用于產生地址,寫入數據initial beginclk = 1'b1;rst_n = 1'b1;#200.1;rst_n = 1'b0;//主動產生上電復位#200;rst_n = 1'b1;#20000;$stop;
endendmodule
  1. 進行完整編譯,編譯通過后開始仿真
    在這里插入圖片描述
  2. 仿真
    在這里插入圖片描述

觀察仿真結果發現與預期相同

第四章 什么是RAM?

RAM即隨機存取存儲器(英語:Random Access Memory,縮寫:RAM),也叫主存,是與CPU直接交換數據的內部存儲器。它可以隨時讀寫(刷新時除外),而且速度很快,通常作為操作系統或其他正在運行中的程序的臨時數據存儲介質。RAM工作時可以隨時從任何一個指定的地址寫入(存入)或讀出(取出)信息。它與ROM的最大區別是數據的易失性,即一旦斷電所存儲的數據將隨之丟失。RAM在計算機和數字系統中用來暫時存儲程序、數據和中間結果。[4]

第一節 RAM_1PORT的調用

  1. 搜索RAM 選擇RAM_1PORT并添加保存為RAM_1PORT.v
    在這里插入圖片描述

  2. 設置位寬和數據深度
    在這里插入圖片描述

  3. 多次點擊NEXT直到出現此界面,并勾選RAM_1PORT_inst.vRAM_1PORT_bb.v
    在這里插入圖片描述

第二節 配置RAM_1PORT

  1. 新建Verilog HDL File,寫入模型的代碼
module RAM_1port_test(input           clk     ,//時鐘信號input           rst_n   ,//上電復位低有效input           rden    ,input           wren    ,input   [7:0]   address ,input   [7:0]   data    ,output  [7:0]   q
);//RAM_1portRAM_1PORT	RAM_1PORT_inst (.aclr       ( ~rst_n    ),.address    ( address   ),.clock      ( clk       ),.data       ( data      ),.rden       ( rden      ),.wren       ( wren      ),.q          ( q         ));
endmodule

以及測試的代碼

`timescale 1ns/1ps
module RAM_1port_test_tb();reg             clk         ;reg             rst_n       ;reg             rden        ;reg             wren        ;reg    [7:0]    address     ;reg    [7:0]    data        ;wire   [7:0]    q           ;//例化要仿真的文件
RAM_1port_test u_RAM_1port_test(.clk        (clk        ),//時鐘信號.rst_n      (rst_n      ),//上電復位低有效.rden       (rden       ),.wren       (wren       ),.address    (address    ),.data       (data       ),.q          (q          )
);always  #10     clk = ~clk;//產生50M仿真時鐘integer i = 0,j = 0;//用于產生地址,寫入數據initial beginclk = 1'b1;rst_n = 1'b1;#200.1;rst_n = 1'b0;//主動產生上電復位
//RAM_1PORTwren = 1'b0;//復位有效,賦初值rden = 1'b0;data = 0;address = 0;#200;rst_n = 1'b1;#200;//wren  50Mfor(i=0;i<256;i=i+1)beginwren = 1'b1;//高電平有效address = i;data = i+1;#20;endwren = 1'b0;//寫完拉低#100;//rden  100Mfor(j=0;j<256;j=j+1)beginrden = 1'b1;address = j;#20;endrden = 1'b0;//讀完拉低#200;$stop;
endendmodule
  1. 完全編譯
    在這里插入圖片描述

第三節 RAM_2PORT的調用

  1. 同樣,找到RAM_2PORT并添加,保存為RAM_2port.v
    在這里插入圖片描述
  2. 配置讀寫模塊在這里插入圖片描述
  3. 配置數據深度為1024
    在這里插入圖片描述
  4. 選擇讀寫時鐘分開
    在這里插入圖片描述
  5. 讀出數據設置為q,同樣選擇復位清零

在這里插入圖片描述

  1. 多次點擊next直到出現此界面,選擇RAM_2port_inst.vRAM_2port_bb.v
    在這里插入圖片描述

第四節 配置RAM_2PORT

  1. 同樣編譯模型代碼和測試代碼
    test_IP.v
module test_IP(input           clk     ,//時鐘信號input           rst_n   ,//上電復位低有效input   [7:0]   data        ,input   [7:0]   rdaddress   ,input           rden        ,input   [7:0]   wraddress   ,input           wrclock     ,input           wren        ,output  [7:0]   q);// //RAM_2portRAM_2port	RAM_2port_inst (.data       ( data      ),.rd_aclr    ( ~rst_n    ),.rdaddress  ( rdaddress ),.rdclock    ( clk       ),.rden       ( rden      ),.wraddress  ( wraddress ),.wrclock    ( wrclock   ),.wren       ( wren      ),.q          ( q         ));endmodule

測試代碼test_tb.v

`timescale 1ns/1ps
module test_tb();reg             clk         ;reg             rst_n       ;reg     [7:0]   data        ;reg     [7:0]   rdaddress   ;reg             rden        ;reg     [7:0]   wraddress   ;reg             wrclock     ;reg             wren        ;wire    [7:0]   q           ;//例化要仿真的文件
test_IP u_test_IP(.clk        (clk        ),//時鐘信號.rst_n      (rst_n      ),//上電復位低有效.data        (data      ),.rdaddress   (rdaddress ),.rden        (rden      ),.wraddress   (wraddress ),.wrclock     (clk       ),.wren        (wren      ),.q           (q         )
);always  #10     clk = ~clk;//產生50M仿真時鐘integer i = 0,j = 0;//用于產生地址,寫入數據initial beginclk = 1'b1;rst_n = 1'b1;#200.1;rst_n = 1'b0;//主動產生上電復位wren = 1'b0;//復位有效,賦初值rden = 1'b0;rdaddress = 0;wraddress = 0;data = 0;#200;rst_n = 1'b1;#200;//wren  50Mfor(i=0;i<256;i=i+1)beginwren = 1'b1;//高電平有效wraddress = i;data = i+1;#20;endwren = 1'b0;//寫完拉低#100;//rden  100Mfor(j=0;j<256;j=j+1)beginrden = 1'b1;rdaddress = j;#20;endrden = 1'b0;//讀完拉低#200;$stop;
endendmodule
  1. 完整編譯通過
    在這里插入圖片描述

第五章 什么是FIFO?

FIFO( First Input First Output)簡單說就是指先進先出。由于微電子技術的飛速發展,新一代FIFO芯片容量越來越大,體積越來越小,價格越來越便宜。作為一種新型大規模集成電路,FIFO芯片以其靈活、方便、高效的特性,逐漸在高速數據采集、高速數據處理、高速數據傳輸以及多機處理系統中得到越來越廣泛的應用。[5]

第一節 FIFO模塊參數配置

1.在IP Catelog搜索FIFO,選擇FIFO并添加,保存為fifo.v
在這里插入圖片描述

  1. 選擇讀寫使用同一個時鐘
    在這里插入圖片描述
  2. 配置SCFIFO
    在這里插入圖片描述
  3. 默認即可,點擊next
    在這里插入圖片描述
  4. 默認即可
    在這里插入圖片描述
  5. 勾選fifo_inst.vfifo_bb.v
    在這里插入圖片描述

第二節 配置FIFO

  1. 與前面相同,新建Verilog HDL File,寫入如下代碼并保存
    模型代碼:
module test_IP(input           clk     ,//時鐘信號input           rst_n   ,//上電復位低有效input   [7:0]   data    ,input           rdreq   ,input           wrreq   ,output          empty   ,output          full    ,output  [7:0]   q       ,output  [7:0]   usedw   );// //FIFOfifo	fifo_inst (.aclr   ( ~rst_n    ),.clock  ( clk       ),.data   ( data      ),.rdreq  ( rdreq     ),.wrreq  ( wrreq     ),.empty  ( empty     ),.full   ( full      ),.q      ( q         ),.usedw  ( usedw     ));
endmodule

測試代碼:

`timescale 1ns/1ps
module test_tb();reg             clk         ;reg             rst_n       ;reg             wrreq       ;reg             rdreq       ;reg     [7:0]   data        ;wire    [7:0]   q           ;wire            empty       ;wire            full        ;wire            usedw       ;//例化要仿真的文件
test_IP u_test_IP(.clk        (clk        ),//時鐘信號.rst_n      (rst_n      ),//上電復位低有效.data       (data   ),.rdreq      (rdreq  ),.wrreq      (wrreq  ),.empty      (empty  ),    .full       (full   ),    .q          (q      ),         .usedw      (usedw  ) 
);always  #10     clk = ~clk;//產生50M仿真時鐘integer i = 0,j = 0;//用于產生地址,寫入數據initial beginclk = 1'b1;rst_n = 1'b1;#200.1;rst_n = 1'b0;//主動產生上電復位rdreq = 1'b0;wrreq = 1'b0;data = 0;#200;rst_n = 1'b1;#200;//wrreq  50Mfor(i=0;i<256;i=i+1)beginwrreq = 1'b1;//高電平有效data = {$random};#20;endwrreq = 1'b0;//寫完拉低#100;//rdreq  100Mfor(j=0;j<256;j=j+1)beginrdreq = 1'b1;#20;endrdreq = 1'b0;#200;$stop;
endendmodule
  1. 全部編譯通過
    在這里插入圖片描述

參考文獻

[1] 潘松·EDA技術與Verilog HDL·北京:清華大學出版社,2010
[2] LPM(FPGA參數化模塊庫) -百度百科
[3] 鎖相環(無線電術語)-百度百科
[4] 楊頌華,馮毛官,孫萬蓉,初秀琴,胡力山編著·數字電子技術基礎:西安電子科技大學出版社,2016.07
[5] FIFO存儲器 -百度百科
[6] Quartus基本IP核調用及仿真
[7] 羅杰.Verilog HDL 與FPGA數字系統設計 第二版[M].機械工業出版社:北京,2022:198-210.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

各地物價和生活成本 東歐篇

東歐地區的物價差異相對較大&#xff0c;一些國家的物價較高&#xff0c;而另一些國家則相對便宜。這些差異主要受當地經濟發展水平、工資水平、旅游業發展以及國際關系等因素影響。以下是一些典型的東歐國家&#xff0c;按物價高低進行分類&#xff1a; &#x1f30d; 物價較高…

改進神經風格遷移

改進神經風格遷移&#xff08;Neural Style Transfer, NST&#xff09;可以從多個方向入手&#xff0c;包括模型結構優化、損失函數設計、計算效率提升、應用場景擴展等。以下是一些關鍵的改進方向及具體方法&#xff1a; 1. 模型結構優化 &#xff08;1&#xff09;輕量化網絡…

1、從零搭建魔法工坊:React 19 新手村生存指南

一、開篇&#xff1a;新世界的入場券 "你好&#xff0c;年輕的魔法學徒&#xff01;歡迎來到React魔法世界。我是你的向導赫敏韋斯萊&#xff0c;今天我們將用React 19這根全新魔杖&#xff0c;搭建屬于你的第一座魔法工坊。" ——以對話形式開場&#xff0c;消除技…

基于 Redis 實現一套動態配置中心 DCC 服務與反射基礎知識講解

目錄 動態配置中心核心價值 輕量級 Redis 方案與 ZooKeeper 的對比分析 為什么選擇自定義 Redis 方案&#xff1f; 1. 技術決策背景 一、活動降級攔截 1. 定義與作用 2. 實現原理 二、活動切量攔截 1. 定義與作用 2. 實現原理 三、兩者的核心區別 四、實際應用案例 1. 電商大促…

如何從項目目標到成功標準:構建可量化、可落地的項目評估體系

引言 在項目管理領域&#xff0c;"項目成功"的定義往往比表面看起來更復雜。根據PMI的行業報告&#xff0c;67%的項目失敗源于目標與成功標準的不匹配。當項目團隊僅關注"按時交付"或"預算達標"時&#xff0c;常會忽視真正的價值創造。本文將通…

深度學習基礎--CNN經典網絡之分組卷積與ResNext網絡實驗探究(pytorch復現)

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 前言 ResNext是分組卷積的開始之作&#xff0c;這里本文將學習ResNext網絡&#xff1b;本文復現了ResNext50神經網絡&#xff0c;并用其進行了猴痘病分類實驗…

SQL 全文檢索原理

全文檢索(Full-Text Search)是SQL中用于高效搜索文本數據的技術&#xff0c;與傳統的LIKE操作或簡單字符串比較相比&#xff0c;它能提供更強大、更靈活的文本搜索能力。 基本概念 全文檢索的核心思想是將文本內容分解為可索引的單元(通常是詞或詞組)&#xff0c;然后建立倒排…

【Linux】Orin NX編譯 linux 內核及內核模塊

1、下載交叉編譯工具:gcc 1)下載地址:https://developer.nvidia.com/embedded/jetson-linux 選擇TOOLS中的交叉編譯工具:gcc 11.3 2)解壓 將gcc編譯器解壓到指定目錄中,如:/home/laoer/nvidia/gcc 3)配置環境變量 創建: ~/nvidia/gcc/env.sh添加: #!/bin/bash e…

Transformers 是工具箱,BERT 是工具。

Transformers 是工具箱&#xff0c;BERT 是工具。 &#x1f50d; 詳細解釋&#xff1a; 名稱作用比喻理解舉例&#x1f916; transformers&#xff08;庫&#xff09;一個框架&#xff0c;提供很多 NLP 模型的“使用方式”&#xff0c;包括文本分類、問答、摘要等相當于一個“…

k8s之Service類型詳解

1.ClusterIP 類型 2.NodePort 類型 3.LoadBalancer 類型 4.ExternalName 類型 類型為 ExternalName 的 Service 將 Service 映射到 DNS 名稱&#xff0c;而不是典型的選擇算符&#xff0c; 例如 my-service 或者 cassandra。你可以使用 spec.externalName 參數指定這些服務…

find指令中使用正則表達式

linux查找命令能結合正則表達式嗎 find命令要使用正則表達式需要結合-regex參數 另&#xff0c;-type參數可以指定查找類型(f為文件&#xff0c;d為文件夾) rootlocalhost:~/regular_expression# ls -alh 總計 8.0K drwxr-xr-x. 5 root root 66 4月 8日 16:26 . dr-xr-…

《穿透表象,洞察分布式軟總線“無形”之奧秘》

分布式系統已成為眾多領域的關鍵支撐技術&#xff0c;而分布式軟總線作為實現設備高效互聯的核心技術&#xff0c;正逐漸走入大眾視野。它常被描述為一條“無形”的總線&#xff0c;這一獨特屬性不僅是理解其技術內涵的關鍵&#xff0c;更是把握其在未來智能世界中重要作用的切…

Ubuntu虛擬機連不上網

橋接 虛擬機Ubuntu系統必須能連接到外網&#xff0c;不然不能更新軟件安裝包 配置虛擬機網絡&#xff08;關機或者掛起狀態&#xff09; 第一步1.重啟虛擬機網絡編輯器&#xff08;還原配置&#xff09; 第二步2.重啟虛擬機網絡適配器&#xff08;移除再添加&#xff09; 啟…

rom定制系列------紅米9A批量線刷原生安卓14雙版 miui系統解鎖可登陸線刷固件

紅米9A。聯發科Helio G25芯片。該處理器支持64位運算?&#xff0c;但此機miui系統運行環境是32位的&#xff0c;這意味著盡管處理器本身支持64位計算&#xff0c;但miui系統限制在32位環境下運行?。官方miui系統穩定版最終為12.5.21安卓11的版本。 原生安卓14批量線刷功能固…

Matlab 分數階PID控制永磁同步電機

1、內容簡介 Matlab 203-分數階PID控制永磁同步電機 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

Flink的 RecordWriter 數據通道 詳解

本文從基礎原理到代碼層面逐步解釋 Flink 的RecordWriter 數據通道&#xff0c;盡量讓初學者也能理解。 1. 什么是 RecordWriter&#xff1f; 通俗理解 RecordWriter 是 Flink 中負責將數據從一個任務&#xff08;Task&#xff09;發送到下游任務的組件。想象一下&#xff0c;…

Dubbo、HTTP、RMI之間的區別

Dubbo、HTTP、RMI之間的區別如下&#xff1a; 表格 復制 特性DubboHTTPRMI通信機制基于Netty的NIO異步通信&#xff0c;采用長連接&#xff0c;支持多種序列化方式基于標準的HTTP協議&#xff0c;無狀態&#xff0c;每次請求獨立基于Java原生的RMI機制&#xff0c;支持Java對…

wkhtmltopdf生成圖片的實踐教程,包含完整的環境配置、參數解析及多語言調用示例

歡迎來到濤濤聊AI&#xff0c;最近在研究HTML生成卡片的功能&#xff0c;一起學習下吧。 一、工具特性與安裝 wkhtmltoimage是基于WebKit引擎的開源命令行工具&#xff0c;可將HTML網頁轉換為JPG/PNG等圖片格式&#xff0c;支持CSS渲染、JavaScript執行和響應式布局。安裝方式…

【在Node.js項目中引入TypeScript:提高開發效率及框架選型指南】

一、TypeScript在Node.js中的核心價值 1.1 靜態類型檢測 // 錯誤示例&#xff1a;TypeScript會報錯 function add(a: number, b: string) {return a b }1.2 工具鏈增強 # 安裝必要依賴 npm install --save-dev typescript types/node ts-node tsconfig.json1.3 代碼維護性提…

化工企業數字化轉型:從數據貫通到生態重構的實踐路徑

一、戰略定位&#xff1a;破解行業核心痛點 化工行業面臨生產安全風險高&#xff08;全國危化品企業事故率年增5%&#xff09;、能耗與排放壓力大&#xff08;占工業總能耗12%&#xff09;、供應鏈協同低效&#xff08;庫存周轉率低于制造業均值30%&#xff09;三大挑戰。《石…