一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用FPGA解一道初中數(shù)學(xué)題

Q4MP_gh_c472c21 ? 來源:電子電路開發(fā)學(xué)習(xí) ? 作者:wcc149 ? 2022-05-13 14:41 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

題目很簡(jiǎn)單:

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

數(shù)學(xué)題目

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

1.對(duì)4361進(jìn)行開方計(jì)算,得到結(jié)果最大為66,則a,b的值均小于等于66。

2.對(duì)4361/2進(jìn)行開方計(jì)算,則得到結(jié)果為46,則a,b兩者,一個(gè)是1-46,一個(gè)是46-66之間的數(shù)。

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

不過我懶得算了,就簡(jiǎn)單寫了個(gè)C語言程序,計(jì)算出了結(jié)果:

#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++)????????//可以設(shè)置1-46
{
for(b=1;b<=?sqr;?b++)????//可以設(shè)置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;
}

其實(shí)可以設(shè)置一個(gè)數(shù)的循環(huán)范圍是:1-46,一個(gè)數(shù)的循環(huán)范圍是46-66,這樣會(huì)減少循環(huán)次數(shù)。

運(yùn)行結(jié)果:

b06ff7ea-d273-11ec-bce3-dac502259ad0.jpg運(yùn)行結(jié)果

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

b0e66cfe-d273-11ec-bce3-dac502259ad0.jpg運(yùn)行結(jié)果

作為一個(gè)野生FPGA開發(fā)者,我在想能不能用FPGA的編程思想來實(shí)現(xiàn)呢?也就是如何用Verilog來實(shí)現(xiàn)兩個(gè)循環(huán)的嵌套呢?抄起鍵盤就是干!

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

為了驗(yàn)證這個(gè)模塊的正確性,我們需要對(duì)這個(gè)模塊進(jìn)行仿真,即給一個(gè)激勵(lì)輸入信號(hào),看輸出是否正確。

新建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等,也可以使用小巧開源的全平臺(tái)仿真工具:iverilog+gtkwave,使用方法可以參考:

全平臺(tái)輕量開源verilog仿真工具iverilog+GTKWave使用教程

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

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

首先,對(duì)Verilog源文件進(jìn)行編譯,檢查是否有語法錯(cuò)誤,這會(huì)在當(dāng)前目錄生成wave目標(biāo)文件:

iverilog-owave*.v

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

vvp-nwave-lxt2

使用gtkwave打開波形文件:

gtkwavewave.vcd

當(dāng)然,以上命令也可以寫成批處理文件:

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

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

仿真波形:

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

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

總結(jié)

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

作為純數(shù)字電路的FPGA,實(shí)現(xiàn)平方根是比較復(fù)雜的,這里采用直接人為輸入平方根結(jié)果的方式,而不是像C語言那樣調(diào)用sqrt函數(shù)自動(dòng)計(jì)算平方根。

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

END 審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22049

    瀏覽量

    618407
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141725
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3689

    瀏覽量

    95249

原文標(biāo)題:如何用FPGA解一道初中數(shù)學(xué)題?

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    聚徽制造業(yè)專屬工業(yè)觸摸屏:精準(zhǔn)控制每一道工序,提升生產(chǎn)精度

    在制造業(yè)競(jìng)爭(zhēng)日益激烈的當(dāng)下,產(chǎn)品質(zhì)量與生產(chǎn)效率成為企業(yè)立足市場(chǎng)的關(guān)鍵,而生產(chǎn)精度則是保障產(chǎn)品質(zhì)量的核心要素。制造業(yè)專屬工業(yè)觸摸屏憑借其獨(dú)特的功能與技術(shù)優(yōu)勢(shì),深度融入生產(chǎn)的每一道工序,實(shí)現(xiàn)對(duì)生
    的頭像 發(fā)表于 05-16 15:50 ?237次閱讀

    【賽宣講會(huì)通知】2024全國(guó)大學(xué)生FPGA創(chuàng)新設(shè)計(jì)競(jìng)賽紫光同創(chuàng)賽道專場(chǎng)

    原文標(biāo)題:【賽宣講會(huì)通知】2024全國(guó)大學(xué)生FPGA創(chuàng)新設(shè)計(jì)競(jìng)賽紫光同創(chuàng)賽道專場(chǎng)文章出處:【微信公眾號(hào):小眼睛科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
    的頭像 發(fā)表于 04-14 09:56 ?263次閱讀
    【賽<b class='flag-5'>題</b>宣講會(huì)通知】2024全國(guó)大學(xué)生<b class='flag-5'>FPGA</b>創(chuàng)新設(shè)計(jì)競(jìng)賽紫光同創(chuàng)賽道專場(chǎng)

    (專家著作,建議收藏)電機(jī)的數(shù)學(xué)研究方法

    不同的方式,用不同的方法解決這些或那些問,但拜沒有充分地 依據(jù)這些研究工作的原始情況。這樣來,就有必要來系統(tǒng)地説明下用在電機(jī)的數(shù)學(xué)研究方法 方面所集聚起來的材料。這個(gè)研究工作,首
    發(fā)表于 04-01 15:02

    成品電池綜合測(cè)試儀:電池品質(zhì)的最后一道把關(guān)人

    綜合測(cè)試儀便成為了電池生產(chǎn)線上的“最后一道把關(guān)人”,為電池品質(zhì)保駕護(hù)航。 成品電池綜合測(cè)試儀的重要性 成品電池綜合測(cè)試儀,是種集多種測(cè)試功能于體的專業(yè)設(shè)備,能夠?qū)﹄姵剡M(jìn)行全面的性能測(cè)試和評(píng)估。從電池的容量、
    的頭像 發(fā)表于 03-18 14:30 ?317次閱讀

    74LV4051 8通模擬多路復(fù)用器/復(fù)用器規(guī)格書

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

    采用fpga控制ADS8555進(jìn)行采樣,對(duì)某一通道輸入正弦信號(hào)時(shí),采樣的結(jié)果卻是方波,為什么?

    采用fpga控制ADS8555進(jìn)行采樣,ADS8555配置為硬件模式,16位并行輸出,對(duì)某一通道輸入正弦信號(hào)時(shí),采樣的結(jié)果卻是方波,采樣值不是最大就是最小,邏輯分析儀檢測(cè)信號(hào),CS和RD等控制
    發(fā)表于 01-15 06:35

    ADS1282做了個(gè)6通的采集電路,把其中兩的PWD后(PWD=0),整體功耗反而變大了,這是為什么?

    ADS1282做了個(gè)6通的采集電路,把其中兩的PWD后(PWD=0),整體功耗反而變大了,這是為什么?
    發(fā)表于 01-07 06:28

    FPGA采集AFE5801輸出信號(hào),信號(hào)波形嚴(yán)重畸變的原因?

    FPGA采集AFE5801輸出信號(hào),在chipscope上看到如上圖所示的波形。向AFE5801上的第三和第四通輸入同正弦波信號(hào),為什么得到了不同的輸出結(jié)果? 另外
    發(fā)表于 12-23 07:43

    ADS1256 8通依次采樣,數(shù)據(jù)不正確怎么解決?

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

    Kimi發(fā)布新一代數(shù)學(xué)推理模型k0-math

    、考研以及包含入門競(jìng)賽的MATH等四個(gè)數(shù)學(xué)基準(zhǔn)測(cè)試中,k0-math初代模型的表現(xiàn)超越了o1-mini和o1-preview模型。而在兩個(gè)難度更高的競(jìng)賽級(jí)別數(shù)學(xué)題庫OMNI-MATH和AIME基準(zhǔn)
    的頭像 發(fā)表于 11-18 11:38 ?970次閱讀

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

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

    粒子探測(cè)器干嘛

    粒子探測(cè)器是種用于檢測(cè)和分析粒子的設(shè)備,它通過熱技術(shù)來實(shí)現(xiàn)對(duì)粒子的檢測(cè)。這種探測(cè)器在物理學(xué)、化學(xué)、材料科學(xué)、環(huán)境科學(xué)等領(lǐng)域有著廣泛的應(yīng)用。 熱粒子探測(cè)器概述 熱
    的頭像 發(fā)表于 09-25 14:20 ?1234次閱讀

    好未來與微軟開展合作,攜手構(gòu)建智慧學(xué)習(xí)生態(tài)系統(tǒng)

    想象下,你正在一道復(fù)雜的數(shù)學(xué)題。這難度不小,你解題時(shí)遇到了瓶頸。這時(shí),位“老師”出現(xiàn)在你
    的頭像 發(fā)表于 08-20 10:12 ?981次閱讀

    分享幾個(gè)FPGA實(shí)現(xiàn)的小型神經(jīng)網(wǎng)絡(luò)

    今天我們分享幾個(gè)FPGA實(shí)現(xiàn)的小型神經(jīng)網(wǎng)絡(luò),側(cè)重應(yīng)用。
    的頭像 發(fā)表于 07-24 09:30 ?1883次閱讀
    分享幾個(gè)<b class='flag-5'>用</b><b class='flag-5'>FPGA</b>實(shí)現(xiàn)的小型神經(jīng)網(wǎng)絡(luò)

    Verilog testbench問題求助

    這是我在HDLbits網(wǎng)站上做到的一道,是testbench,請(qǐng)問這個(gè)代碼為什么input都是低電平0?我設(shè)置的時(shí)鐘就是周期10ns,占空比50%的時(shí)鐘信號(hào)???怎么會(huì)出現(xiàn)這種情況......
    發(fā)表于 07-21 11:14