在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用FPGA解一道初中數學題

Q4MP_gh_c472c21 ? 來源:電子電路開發學習 ? 作者:wcc149 ? 2022-05-13 14:41 ? 次閱讀

前幾天和同事聊天,他說他上初中的兒子做出了一道很難的數學題,想考考我們這些大學生看能不能做得出來?

題目很簡單:

b04b8f86-d273-11ec-bce3-dac502259ad0.jpg

數學題目

大家先嘗試做一下?我沒想出怎么算的,只是用排除法確定了a和b的范圍,然后再逐個嘗試。

1.對4361進行開方計算,得到結果最大為66,則a,b的值均小于等于66。

2.對4361/2進行開方計算,則得到結果為46,則a,b兩者,一個是1-46,一個是46-66之間的數。

3.由平方和4361末尾為1,再根據整數平方和的幾種可能,計算出僅有0+1和5+6這兩種可能,而且平方之后的個位數為0/1/5/6,這樣就進一步縮小了范圍,通過多次計算嘗試可以得出結果。

不過我懶得算了,就簡單寫了個C語言程序,計算出了結果:

#include
#include
#include

intmain(void)
{
intnum;
inta,b,n;
intresult;
intsqr;

printf("pleaseenteranumber:");//4361
scanf("%d",&num);
printf("inputnum:%d
",num);

sqr=sqrt(num);
for(a=1;a<=?sqr;?a++)????????//可以設置1-46
{
for(b=1;b<=?sqr;?b++)????//可以設置46-66
{
result=pow(a,2)+pow(b,2);
if(result==num)
{
printf("a=%2d,b=%2d,a+b=%d
",a,b,a+b);
n++;
}
}
}
if(n==0)
printf("Thereisnoanswer!
");

return0;
}

其實可以設置一個數的循環范圍是:1-46,一個數的循環范圍是46-66,這樣會減少循環次數。

運行結果:

b06ff7ea-d273-11ec-bce3-dac502259ad0.jpg運行結果

而且這種方式還適用于解的個數不唯一的情況,比如7605:

b0e66cfe-d273-11ec-bce3-dac502259ad0.jpg運行結果

作為一個野生FPGA開發者,我在想能不能用FPGA的編程思想來實現呢?也就是如何用Verilog來實現兩個循環的嵌套呢?抄起鍵盤就是干!

verilog源文件fpga_math.v:

modulefpga_math(
//inputs
inputclk,
inputrst_n,

//outputs
outputreg[13:0]a,b,
outputreg[14:0]result,
outputok
);

parameterSUM=4361;
parameterSQR=67;//sqrt(SUM);

reg[13:0]tmp_a;
reg[13:0]tmp_b;
regflag;

assignok=(tmp_a*tmp_a+tmp_b*tmp_b==SUM);

always@(posedgeclk)
begin
if(!rst_n)
tmp_b<=0;
elseif(tmp_b==SQR)
tmp_b<=?0;
elseif(tmp_a!=SQR)
tmp_b<=?tmp_b?+?1;
end

always@(posedgeclk)
begin
if(!rst_n)
flag<=0;
elseif(tmp_b==SQR)
flag<=?1;
else
flag<=?0;
end

always@(posedgeclk)
begin
if(!rst_n)
tmp_a<=0;
elseif((tmp_a!=SQR)&flag)
tmp_a<=?tmp_a?+?1;
end

always@(posedgeclk)
begin
if(!rst_n)
begin
a<=0;
b<=?0;
result<=?0;
end
elseif(ok)
begin
a<=tmp_a;
b<=?tmp_b;
????????result?=?tmp_a?+?tmp_b;
????end
end

endmodule

為了驗證這個模塊的正確性,我們需要對這個模塊進行仿真,即給一個激勵輸入信號,看輸出是否正確。

新建testbench文件fpga_math_tb.v:

`timescale1ns/100ps

modulefpga_math_tb;

parameterSUM=4361;
parameterSQR=67;//sqrt(4361)

parameterSYSCLK_PERIOD=10;//100MHZ

wire[13:0]a,b;
wire[14:0]result;

regSYSCLK;
regNSYSRESET;

initial
begin
SYSCLK=1'b0;
NSYSRESET=1'b0;

#(SYSCLK_PERIOD*10)
NSYSRESET=1'b1;
#(SYSCLK_PERIOD*(SQR*SQR+500))
$stop;
end

/*generateclock*/
always@(SYSCLK)
#(SYSCLK_PERIOD/2.0)SYSCLK<=?!SYSCLK;???????

/*instancemodule*/
fpga_math#(
.SUM(SUM),
.SQR(SQR)
)fpga_math_0(
//inputs
.clk(SYSCLK),
.rst_n(NSYSRESET),

//outputs
.a(a),
.b(b),
.result(result),
.ok(ok)
);

endmodule

ModelSim仿真波形:

b115143c-d273-11ec-bce3-dac502259ad0.jpg仿真波形

仿真工具除了使用各大FPGA廠商IDE帶的ModelSim等,也可以使用小巧開源的全平臺仿真工具:iverilog+gtkwave,使用方法可以參考:

全平臺輕量開源verilog仿真工具iverilog+GTKWave使用教程

如果使用iverilog進行仿真,需要在TB文件中添加以下幾行語句:

/*iverilog*/
initial
begin
$dumpfile("wave.vcd");//生成的vcd文件名稱
$dumpvars(0,fpga_math_tb);//tb模塊名稱
end
/*iverilog*

首先,對Verilog源文件進行編譯,檢查是否有語法錯誤,這會在當前目錄生成wave目標文件:

iverilog-owave*.v

然后通過vvp指令,產生仿真的wave.vcd波形文件:

vvp-nwave-lxt2

使用gtkwave打開波形文件:

gtkwavewave.vcd

當然,以上命令也可以寫成批處理文件:

echo"開始編譯"
iverilog-owave*.v
echo"編譯完成"
echo"生成波形文件"
vvp-nwave-lxt2
echo"打開波形文件"
gtkwavewave.vcd

以文本方式存儲為build.bat文件即可,雙擊即可自動完成編譯、生成波形文件、打開波形文件操作。

仿真波形:

b134afc2-d273-11ec-bce3-dac502259ad0.jpg仿真波形

可以看出,和使用ModelSim仿真是一樣的結果。

總結

從仿真波形圖中,可以得到計算的結果,a+b的值為91,如果要在真實的FPGA芯片硬件上實現,還需要添加其他功能模塊,把結果通過串口輸出,或者在數碼管等顯示屏上進行顯示,這里只是簡單介紹使用FPGA計算方法的實現。

作為純數字電路的FPGA,實現平方根是比較復雜的,這里采用直接人為輸入平方根結果的方式,而不是像C語言那樣調用sqrt函數自動計算平方根。

FPGA中不僅有觸發器和查找表,而且還有乘法器、除法器等硬核IP,所以在涉及到乘除法、平方根運算時,不要直接使用*/等運算符,而是要使用FPGA自帶的IP核,這樣就不會占用大量的邏輯資源,像Xilinx的基于Cordic算法的Cordic IP核,不僅能實現平方根計算,而且還有sin/cos/tan/arctan等三角函數。

END 審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1631

    文章

    21808

    瀏覽量

    606808
  • C語言
    +關注

    關注

    180

    文章

    7616

    瀏覽量

    138078
  • 編程
    +關注

    關注

    88

    文章

    3643

    瀏覽量

    94132

原文標題:如何用FPGA解一道初中數學題?

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 0人收藏

    評論

    相關推薦

    74LV4051 8通模擬多路復用器/復用器規格書

    電子發燒友網站提供《74LV4051 8通模擬多路復用器/復用器規格書.pdf》資料免費下載
    發表于 02-09 11:57 ?0次下載
    74LV4051 8通<b class='flag-5'>道</b>模擬多路復用器/<b class='flag-5'>解</b>復用器規格書

    采用fpga控制ADS8555進行采樣,對某一通道輸入正弦信號時,采樣的結果卻是方波,為什么?

    采用fpga控制ADS8555進行采樣,ADS8555配置為硬件模式,16位并行輸出,對某一通道輸入正弦信號時,采樣的結果卻是方波,采樣值不是最大就是最小,邏輯分析儀檢測信號,CS和RD等控制
    發表于 01-15 06:35

    ADS1256 8通依次采樣,數據不正確怎么解決?

    SPI總線速度1.40625MB/S,基于STM32的HAL庫下,對八通輸入同一道方波,方波頻率20HZ、40HZ、60HZ時,會出現只有部分通道采樣的數據能顯示波形,輸入其他頻率的方波時,會存在采樣到的數據顯示的波形占空比與輸入方波的占空比不相同,這種情況是屬于寄存器
    發表于 11-22 07:09

    Kimi發布新一代數學推理模型k0-math

    、考研以及包含入門競賽的MATH等四個數學基準測試中,k0-math初代模型的表現超越了o1-mini和o1-preview模型。而在兩個難度更高的競賽級別數學題庫OMNI-MATH和AIME基準
    的頭像 發表于 11-18 11:38 ?600次閱讀

    求解智能韌性,華為方程寫下答案

    續寫麥特卡夫定律,華為方程解鎖智能韌性
    的頭像 發表于 09-30 14:37 ?2096次閱讀
    求解智能韌性,華為<b class='flag-5'>用</b>三<b class='flag-5'>道</b>方程寫下答案

    粒子探測器干嘛

    粒子探測器是種用于檢測和分析粒子的設備,它通過熱技術來實現對粒子的檢測。這種探測器在物理學、化學、材料科學、環境科學等領域有著廣泛的應用。 熱粒子探測器概述 熱
    的頭像 發表于 09-25 14:20 ?624次閱讀

    好未來與微軟開展合作,攜手構建智慧學習生態系統

    想象下,你正在一道復雜的數學題。這難度不小,你解題時遇到了瓶頸。這時,位“老師”出現在你
    的頭像 發表于 08-20 10:12 ?594次閱讀

    Verilog testbench問題求助

    這是我在HDLbits網站上做到的一道,是testbench,請問這個代碼為什么input都是低電平0?我設置的時鐘就是周期10ns,占空比50%的時鐘信號啊?怎么會出現這種情況......
    發表于 07-21 11:14

    DS90CR486 133MHz 48位通鏈路串器數據表

    電子發燒友網站提供《DS90CR486 133MHz 48位通鏈路串器數據表.pdf》資料免費下載
    發表于 07-02 09:52 ?0次下載
    DS90CR486 133MHz 48位通<b class='flag-5'>道</b>鏈路<b class='flag-5'>解</b>串器數據表

    DS92LV3241/3242 32位通Link II串行器/串器數據表

    電子發燒友網站提供《DS92LV3241/3242 32位通Link II串行器/串器數據表.pdf》資料免費下載
    發表于 07-01 09:58 ?0次下載
    DS92LV3241/3242 32位通<b class='flag-5'>道</b>Link II串行器/<b class='flag-5'>解</b>串器數據表

    DS92LV1260六通10位BLVDS串器數據表

    電子發燒友網站提供《DS92LV1260六通10位BLVDS串器數據表.pdf》資料免費下載
    發表于 07-01 09:41 ?0次下載
    DS92LV1260六通<b class='flag-5'>道</b>10位BLVDS<b class='flag-5'>解</b>串器數據表

    18年,6570個日夜,小熊電器何以撩動年輕人?

    小熊電器,十八年一道“年輕方程式”
    的頭像 發表于 03-25 09:23 ?1939次閱讀
    18年,6570個日夜,小熊電器何以撩動年輕人?

    fpga的是什么編程語言 fpga什么語言開發

    fpga的是什么編程語言 FPGA(現場可編程邏輯門陣列)主要使用的編程語言是硬件描述語言(HDL)。在眾多的HDL中,Verilog HDL和VHDL是最常用的兩種。 Verilog HDL
    的頭像 發表于 03-14 17:09 ?3697次閱讀

    谷歌推出AI框架,實現AI模型的自然語言學習

    據了解,在此款“社交學習”框架中,“學生模型”可向多位已處理指定任務的“教師模型”請教各類應對方案,研究團隊主要通過開展“垃圾短信檢測”、“解決小學數學題”及“根據文本回答問題”等多項試驗,以衡量此框架的運作效果。
    的頭像 發表于 03-11 11:36 ?1030次閱讀

    AI大模型落地學習機,大模型應用成學習機創新方向

    技術的學習機,也被稱為AI學習機。 ? AI 大模型落地學習機 ? 去年底,學而思就發布了學習機新品xPad2 Pro系列,該學習機搭載學而思大模型MathGPT(中文名:九章大模型)。據稱MathGPT可以實現對小學初中的任何一道數學
    的頭像 發表于 02-23 01:19 ?4006次閱讀
    主站蜘蛛池模板: 婷婷狠狠 | 国产高清视频在线免费观看 | 宅男666在线永久免费观看 | 色综合视频在线 | 精品欧美 | 色在线视频观看 | yy6080亚洲半夜理论一级毛片 | 天堂在线网站 | 97伊人网| 亚洲黄网址 | 32pao强力打造免费高速高清 | 激情理论 | 双性受粗大撑开白浊 | 欧美黑人5o厘米全进去 | 中文字幕一区二区三区四区五区人 | 欧美日韩高清一本大道免费 | 国内精品视频免费观看 | 亚洲www美色| 美女视频黄.免费网址 | 免费人成在线观看视频播放 | 2019国产情侣 | 久久久噜噜噜久久久 | 婷婷久久久五月综合色 | 久久精品男人影院 | 午夜欧美福利视频 | 俄罗斯一级成人毛片 | 午夜影视网 | 好男人www社区影视在线 | 日日干天天干 | 综合欧美一区二区三区 | 亚洲国产精品日韩专区avtube | 免费免费啪视频在线 | 亚洲欧洲国产精品你懂的 | 婷婷丁香五月中文字幕 | 黄色网址播放 | 日夜操在线视频 | 一级女人毛片人一女人 | 黄a免费| 四级毛片在线播放 | 亚洲 欧美 日韩 综合 | 亚洲欧美一区二区三区另类 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品